xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/sibyte/sb1250_mc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*  *********************************************************************
3*4882a593Smuzhiyun     *  SB1250 Board Support Package
4*4882a593Smuzhiyun     *
5*4882a593Smuzhiyun     *  Memory Controller constants		File: sb1250_mc.h
6*4882a593Smuzhiyun     *
7*4882a593Smuzhiyun     *  This module contains constants and macros useful for
8*4882a593Smuzhiyun     *  programming the memory controller.
9*4882a593Smuzhiyun     *
10*4882a593Smuzhiyun     *  SB1250 specification level:  User's manual 1/02/02
11*4882a593Smuzhiyun     *
12*4882a593Smuzhiyun     *********************************************************************
13*4882a593Smuzhiyun     *
14*4882a593Smuzhiyun     *  Copyright 2000, 2001, 2002, 2003
15*4882a593Smuzhiyun     *  Broadcom Corporation. All rights reserved.
16*4882a593Smuzhiyun     *
17*4882a593Smuzhiyun     ********************************************************************* */
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #ifndef _SB1250_MC_H
21*4882a593Smuzhiyun #define _SB1250_MC_H
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #include <asm/sibyte/sb1250_defs.h>
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*
26*4882a593Smuzhiyun  * Memory Channel Config Register (table 6-14)
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define S_MC_RESERVED0		    0
30*4882a593Smuzhiyun #define M_MC_RESERVED0		    _SB_MAKEMASK(8, S_MC_RESERVED0)
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #define S_MC_CHANNEL_SEL	    8
33*4882a593Smuzhiyun #define M_MC_CHANNEL_SEL	    _SB_MAKEMASK(8, S_MC_CHANNEL_SEL)
34*4882a593Smuzhiyun #define V_MC_CHANNEL_SEL(x)	    _SB_MAKEVALUE(x, S_MC_CHANNEL_SEL)
35*4882a593Smuzhiyun #define G_MC_CHANNEL_SEL(x)	    _SB_GETVALUE(x, S_MC_CHANNEL_SEL, M_MC_CHANNEL_SEL)
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define S_MC_BANK0_MAP		    16
38*4882a593Smuzhiyun #define M_MC_BANK0_MAP		    _SB_MAKEMASK(4, S_MC_BANK0_MAP)
39*4882a593Smuzhiyun #define V_MC_BANK0_MAP(x)	    _SB_MAKEVALUE(x, S_MC_BANK0_MAP)
40*4882a593Smuzhiyun #define G_MC_BANK0_MAP(x)	    _SB_GETVALUE(x, S_MC_BANK0_MAP, M_MC_BANK0_MAP)
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #define K_MC_BANK0_MAP_DEFAULT	    0x00
43*4882a593Smuzhiyun #define V_MC_BANK0_MAP_DEFAULT	    V_MC_BANK0_MAP(K_MC_BANK0_MAP_DEFAULT)
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #define S_MC_BANK1_MAP		    20
46*4882a593Smuzhiyun #define M_MC_BANK1_MAP		    _SB_MAKEMASK(4, S_MC_BANK1_MAP)
47*4882a593Smuzhiyun #define V_MC_BANK1_MAP(x)	    _SB_MAKEVALUE(x, S_MC_BANK1_MAP)
48*4882a593Smuzhiyun #define G_MC_BANK1_MAP(x)	    _SB_GETVALUE(x, S_MC_BANK1_MAP, M_MC_BANK1_MAP)
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun #define K_MC_BANK1_MAP_DEFAULT	    0x08
51*4882a593Smuzhiyun #define V_MC_BANK1_MAP_DEFAULT	    V_MC_BANK1_MAP(K_MC_BANK1_MAP_DEFAULT)
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #define S_MC_BANK2_MAP		    24
54*4882a593Smuzhiyun #define M_MC_BANK2_MAP		    _SB_MAKEMASK(4, S_MC_BANK2_MAP)
55*4882a593Smuzhiyun #define V_MC_BANK2_MAP(x)	    _SB_MAKEVALUE(x, S_MC_BANK2_MAP)
56*4882a593Smuzhiyun #define G_MC_BANK2_MAP(x)	    _SB_GETVALUE(x, S_MC_BANK2_MAP, M_MC_BANK2_MAP)
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun #define K_MC_BANK2_MAP_DEFAULT	    0x09
59*4882a593Smuzhiyun #define V_MC_BANK2_MAP_DEFAULT	    V_MC_BANK2_MAP(K_MC_BANK2_MAP_DEFAULT)
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun #define S_MC_BANK3_MAP		    28
62*4882a593Smuzhiyun #define M_MC_BANK3_MAP		    _SB_MAKEMASK(4, S_MC_BANK3_MAP)
63*4882a593Smuzhiyun #define V_MC_BANK3_MAP(x)	    _SB_MAKEVALUE(x, S_MC_BANK3_MAP)
64*4882a593Smuzhiyun #define G_MC_BANK3_MAP(x)	    _SB_GETVALUE(x, S_MC_BANK3_MAP, M_MC_BANK3_MAP)
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun #define K_MC_BANK3_MAP_DEFAULT	    0x0C
67*4882a593Smuzhiyun #define V_MC_BANK3_MAP_DEFAULT	    V_MC_BANK3_MAP(K_MC_BANK3_MAP_DEFAULT)
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define M_MC_RESERVED1		    _SB_MAKEMASK(8, 32)
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #define S_MC_QUEUE_SIZE		    40
72*4882a593Smuzhiyun #define M_MC_QUEUE_SIZE		    _SB_MAKEMASK(4, S_MC_QUEUE_SIZE)
73*4882a593Smuzhiyun #define V_MC_QUEUE_SIZE(x)	    _SB_MAKEVALUE(x, S_MC_QUEUE_SIZE)
74*4882a593Smuzhiyun #define G_MC_QUEUE_SIZE(x)	    _SB_GETVALUE(x, S_MC_QUEUE_SIZE, M_MC_QUEUE_SIZE)
75*4882a593Smuzhiyun #define V_MC_QUEUE_SIZE_DEFAULT	    V_MC_QUEUE_SIZE(0x0A)
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define S_MC_AGE_LIMIT		    44
78*4882a593Smuzhiyun #define M_MC_AGE_LIMIT		    _SB_MAKEMASK(4, S_MC_AGE_LIMIT)
79*4882a593Smuzhiyun #define V_MC_AGE_LIMIT(x)	    _SB_MAKEVALUE(x, S_MC_AGE_LIMIT)
80*4882a593Smuzhiyun #define G_MC_AGE_LIMIT(x)	    _SB_GETVALUE(x, S_MC_AGE_LIMIT, M_MC_AGE_LIMIT)
81*4882a593Smuzhiyun #define V_MC_AGE_LIMIT_DEFAULT	    V_MC_AGE_LIMIT(8)
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #define S_MC_WR_LIMIT		    48
84*4882a593Smuzhiyun #define M_MC_WR_LIMIT		    _SB_MAKEMASK(4, S_MC_WR_LIMIT)
85*4882a593Smuzhiyun #define V_MC_WR_LIMIT(x)	    _SB_MAKEVALUE(x, S_MC_WR_LIMIT)
86*4882a593Smuzhiyun #define G_MC_WR_LIMIT(x)	    _SB_GETVALUE(x, S_MC_WR_LIMIT, M_MC_WR_LIMIT)
87*4882a593Smuzhiyun #define V_MC_WR_LIMIT_DEFAULT	    V_MC_WR_LIMIT(5)
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #define M_MC_IOB1HIGHPRIORITY	    _SB_MAKEMASK1(52)
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #define M_MC_RESERVED2		    _SB_MAKEMASK(3, 53)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #define S_MC_CS_MODE		    56
94*4882a593Smuzhiyun #define M_MC_CS_MODE		    _SB_MAKEMASK(4, S_MC_CS_MODE)
95*4882a593Smuzhiyun #define V_MC_CS_MODE(x)		    _SB_MAKEVALUE(x, S_MC_CS_MODE)
96*4882a593Smuzhiyun #define G_MC_CS_MODE(x)		    _SB_GETVALUE(x, S_MC_CS_MODE, M_MC_CS_MODE)
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun #define K_MC_CS_MODE_MSB_CS	    0
99*4882a593Smuzhiyun #define K_MC_CS_MODE_INTLV_CS	    15
100*4882a593Smuzhiyun #define K_MC_CS_MODE_MIXED_CS_10    12
101*4882a593Smuzhiyun #define K_MC_CS_MODE_MIXED_CS_30    6
102*4882a593Smuzhiyun #define K_MC_CS_MODE_MIXED_CS_32    3
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun #define V_MC_CS_MODE_MSB_CS	    V_MC_CS_MODE(K_MC_CS_MODE_MSB_CS)
105*4882a593Smuzhiyun #define V_MC_CS_MODE_INTLV_CS	    V_MC_CS_MODE(K_MC_CS_MODE_INTLV_CS)
106*4882a593Smuzhiyun #define V_MC_CS_MODE_MIXED_CS_10    V_MC_CS_MODE(K_MC_CS_MODE_MIXED_CS_10)
107*4882a593Smuzhiyun #define V_MC_CS_MODE_MIXED_CS_30    V_MC_CS_MODE(K_MC_CS_MODE_MIXED_CS_30)
108*4882a593Smuzhiyun #define V_MC_CS_MODE_MIXED_CS_32    V_MC_CS_MODE(K_MC_CS_MODE_MIXED_CS_32)
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun #define M_MC_ECC_DISABLE	    _SB_MAKEMASK1(60)
111*4882a593Smuzhiyun #define M_MC_BERR_DISABLE	    _SB_MAKEMASK1(61)
112*4882a593Smuzhiyun #define M_MC_FORCE_SEQ		    _SB_MAKEMASK1(62)
113*4882a593Smuzhiyun #define M_MC_DEBUG		    _SB_MAKEMASK1(63)
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun #define V_MC_CONFIG_DEFAULT	V_MC_WR_LIMIT_DEFAULT | V_MC_AGE_LIMIT_DEFAULT | \
116*4882a593Smuzhiyun 				V_MC_BANK0_MAP_DEFAULT | V_MC_BANK1_MAP_DEFAULT | \
117*4882a593Smuzhiyun 				V_MC_BANK2_MAP_DEFAULT | V_MC_BANK3_MAP_DEFAULT | V_MC_CHANNEL_SEL(0) | \
118*4882a593Smuzhiyun 				M_MC_IOB1HIGHPRIORITY | V_MC_QUEUE_SIZE_DEFAULT
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /*
122*4882a593Smuzhiyun  * Memory clock config register (Table 6-15)
123*4882a593Smuzhiyun  *
124*4882a593Smuzhiyun  * Note: this field has been updated to be consistent with the errata to 0.2
125*4882a593Smuzhiyun  */
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun #define S_MC_CLK_RATIO		    0
128*4882a593Smuzhiyun #define M_MC_CLK_RATIO		    _SB_MAKEMASK(4, S_MC_CLK_RATIO)
129*4882a593Smuzhiyun #define V_MC_CLK_RATIO(x)	    _SB_MAKEVALUE(x, S_MC_CLK_RATIO)
130*4882a593Smuzhiyun #define G_MC_CLK_RATIO(x)	    _SB_GETVALUE(x, S_MC_CLK_RATIO, M_MC_CLK_RATIO)
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun #define K_MC_CLK_RATIO_2X	    4
133*4882a593Smuzhiyun #define K_MC_CLK_RATIO_25X	    5
134*4882a593Smuzhiyun #define K_MC_CLK_RATIO_3X	    6
135*4882a593Smuzhiyun #define K_MC_CLK_RATIO_35X	    7
136*4882a593Smuzhiyun #define K_MC_CLK_RATIO_4X	    8
137*4882a593Smuzhiyun #define K_MC_CLK_RATIO_45X	    9
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun #define V_MC_CLK_RATIO_2X	    V_MC_CLK_RATIO(K_MC_CLK_RATIO_2X)
140*4882a593Smuzhiyun #define V_MC_CLK_RATIO_25X	    V_MC_CLK_RATIO(K_MC_CLK_RATIO_25X)
141*4882a593Smuzhiyun #define V_MC_CLK_RATIO_3X	    V_MC_CLK_RATIO(K_MC_CLK_RATIO_3X)
142*4882a593Smuzhiyun #define V_MC_CLK_RATIO_35X	    V_MC_CLK_RATIO(K_MC_CLK_RATIO_35X)
143*4882a593Smuzhiyun #define V_MC_CLK_RATIO_4X	    V_MC_CLK_RATIO(K_MC_CLK_RATIO_4X)
144*4882a593Smuzhiyun #define V_MC_CLK_RATIO_45X	    V_MC_CLK_RATIO(K_MC_CLK_RATIO_45X)
145*4882a593Smuzhiyun #define V_MC_CLK_RATIO_DEFAULT	    V_MC_CLK_RATIO_25X
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun #define S_MC_REF_RATE		     8
148*4882a593Smuzhiyun #define M_MC_REF_RATE		     _SB_MAKEMASK(8, S_MC_REF_RATE)
149*4882a593Smuzhiyun #define V_MC_REF_RATE(x)	     _SB_MAKEVALUE(x, S_MC_REF_RATE)
150*4882a593Smuzhiyun #define G_MC_REF_RATE(x)	     _SB_GETVALUE(x, S_MC_REF_RATE, M_MC_REF_RATE)
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun #define K_MC_REF_RATE_100MHz	     0x62
153*4882a593Smuzhiyun #define K_MC_REF_RATE_133MHz	     0x81
154*4882a593Smuzhiyun #define K_MC_REF_RATE_200MHz	     0xC4
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun #define V_MC_REF_RATE_100MHz	     V_MC_REF_RATE(K_MC_REF_RATE_100MHz)
157*4882a593Smuzhiyun #define V_MC_REF_RATE_133MHz	     V_MC_REF_RATE(K_MC_REF_RATE_133MHz)
158*4882a593Smuzhiyun #define V_MC_REF_RATE_200MHz	     V_MC_REF_RATE(K_MC_REF_RATE_200MHz)
159*4882a593Smuzhiyun #define V_MC_REF_RATE_DEFAULT	     V_MC_REF_RATE_100MHz
160*4882a593Smuzhiyun 
161*4882a593Smuzhiyun #define S_MC_CLOCK_DRIVE	     16
162*4882a593Smuzhiyun #define M_MC_CLOCK_DRIVE	     _SB_MAKEMASK(4, S_MC_CLOCK_DRIVE)
163*4882a593Smuzhiyun #define V_MC_CLOCK_DRIVE(x)	     _SB_MAKEVALUE(x, S_MC_CLOCK_DRIVE)
164*4882a593Smuzhiyun #define G_MC_CLOCK_DRIVE(x)	     _SB_GETVALUE(x, S_MC_CLOCK_DRIVE, M_MC_CLOCK_DRIVE)
165*4882a593Smuzhiyun #define V_MC_CLOCK_DRIVE_DEFAULT     V_MC_CLOCK_DRIVE(0xF)
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun #define S_MC_DATA_DRIVE		     20
168*4882a593Smuzhiyun #define M_MC_DATA_DRIVE		     _SB_MAKEMASK(4, S_MC_DATA_DRIVE)
169*4882a593Smuzhiyun #define V_MC_DATA_DRIVE(x)	     _SB_MAKEVALUE(x, S_MC_DATA_DRIVE)
170*4882a593Smuzhiyun #define G_MC_DATA_DRIVE(x)	     _SB_GETVALUE(x, S_MC_DATA_DRIVE, M_MC_DATA_DRIVE)
171*4882a593Smuzhiyun #define V_MC_DATA_DRIVE_DEFAULT	     V_MC_DATA_DRIVE(0x0)
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #define S_MC_ADDR_DRIVE		     24
174*4882a593Smuzhiyun #define M_MC_ADDR_DRIVE		     _SB_MAKEMASK(4, S_MC_ADDR_DRIVE)
175*4882a593Smuzhiyun #define V_MC_ADDR_DRIVE(x)	     _SB_MAKEVALUE(x, S_MC_ADDR_DRIVE)
176*4882a593Smuzhiyun #define G_MC_ADDR_DRIVE(x)	     _SB_GETVALUE(x, S_MC_ADDR_DRIVE, M_MC_ADDR_DRIVE)
177*4882a593Smuzhiyun #define V_MC_ADDR_DRIVE_DEFAULT	     V_MC_ADDR_DRIVE(0x0)
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun #if SIBYTE_HDR_FEATURE(1250, PASS3) || SIBYTE_HDR_FEATURE(112x, PASS1)
180*4882a593Smuzhiyun #define M_MC_REF_DISABLE	     _SB_MAKEMASK1(30)
181*4882a593Smuzhiyun #endif /* 1250 PASS3 || 112x PASS1 */
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun #define M_MC_DLL_BYPASS		     _SB_MAKEMASK1(31)
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun #define S_MC_DQI_SKEW		    32
186*4882a593Smuzhiyun #define M_MC_DQI_SKEW		    _SB_MAKEMASK(8, S_MC_DQI_SKEW)
187*4882a593Smuzhiyun #define V_MC_DQI_SKEW(x)	    _SB_MAKEVALUE(x, S_MC_DQI_SKEW)
188*4882a593Smuzhiyun #define G_MC_DQI_SKEW(x)	    _SB_GETVALUE(x, S_MC_DQI_SKEW, M_MC_DQI_SKEW)
189*4882a593Smuzhiyun #define V_MC_DQI_SKEW_DEFAULT	    V_MC_DQI_SKEW(0)
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun #define S_MC_DQO_SKEW		    40
192*4882a593Smuzhiyun #define M_MC_DQO_SKEW		    _SB_MAKEMASK(8, S_MC_DQO_SKEW)
193*4882a593Smuzhiyun #define V_MC_DQO_SKEW(x)	    _SB_MAKEVALUE(x, S_MC_DQO_SKEW)
194*4882a593Smuzhiyun #define G_MC_DQO_SKEW(x)	    _SB_GETVALUE(x, S_MC_DQO_SKEW, M_MC_DQO_SKEW)
195*4882a593Smuzhiyun #define V_MC_DQO_SKEW_DEFAULT	    V_MC_DQO_SKEW(0)
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun #define S_MC_ADDR_SKEW		     48
198*4882a593Smuzhiyun #define M_MC_ADDR_SKEW		     _SB_MAKEMASK(8, S_MC_ADDR_SKEW)
199*4882a593Smuzhiyun #define V_MC_ADDR_SKEW(x)	     _SB_MAKEVALUE(x, S_MC_ADDR_SKEW)
200*4882a593Smuzhiyun #define G_MC_ADDR_SKEW(x)	     _SB_GETVALUE(x, S_MC_ADDR_SKEW, M_MC_ADDR_SKEW)
201*4882a593Smuzhiyun #define V_MC_ADDR_SKEW_DEFAULT	     V_MC_ADDR_SKEW(0x0F)
202*4882a593Smuzhiyun 
203*4882a593Smuzhiyun #define S_MC_DLL_DEFAULT	     56
204*4882a593Smuzhiyun #define M_MC_DLL_DEFAULT	     _SB_MAKEMASK(8, S_MC_DLL_DEFAULT)
205*4882a593Smuzhiyun #define V_MC_DLL_DEFAULT(x)	     _SB_MAKEVALUE(x, S_MC_DLL_DEFAULT)
206*4882a593Smuzhiyun #define G_MC_DLL_DEFAULT(x)	     _SB_GETVALUE(x, S_MC_DLL_DEFAULT, M_MC_DLL_DEFAULT)
207*4882a593Smuzhiyun #define V_MC_DLL_DEFAULT_DEFAULT     V_MC_DLL_DEFAULT(0x10)
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun #define V_MC_CLKCONFIG_DEFAULT	     V_MC_DLL_DEFAULT_DEFAULT |	 \
210*4882a593Smuzhiyun 				     V_MC_ADDR_SKEW_DEFAULT | \
211*4882a593Smuzhiyun 				     V_MC_DQO_SKEW_DEFAULT | \
212*4882a593Smuzhiyun 				     V_MC_DQI_SKEW_DEFAULT | \
213*4882a593Smuzhiyun 				     V_MC_ADDR_DRIVE_DEFAULT | \
214*4882a593Smuzhiyun 				     V_MC_DATA_DRIVE_DEFAULT | \
215*4882a593Smuzhiyun 				     V_MC_CLOCK_DRIVE_DEFAULT | \
216*4882a593Smuzhiyun 				     V_MC_REF_RATE_DEFAULT
217*4882a593Smuzhiyun 
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun /*
221*4882a593Smuzhiyun  * DRAM Command Register (Table 6-13)
222*4882a593Smuzhiyun  */
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun #define S_MC_COMMAND		    0
225*4882a593Smuzhiyun #define M_MC_COMMAND		    _SB_MAKEMASK(4, S_MC_COMMAND)
226*4882a593Smuzhiyun #define V_MC_COMMAND(x)		    _SB_MAKEVALUE(x, S_MC_COMMAND)
227*4882a593Smuzhiyun #define G_MC_COMMAND(x)		    _SB_GETVALUE(x, S_MC_COMMAND, M_MC_COMMAND)
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun #define K_MC_COMMAND_EMRS	    0
230*4882a593Smuzhiyun #define K_MC_COMMAND_MRS	    1
231*4882a593Smuzhiyun #define K_MC_COMMAND_PRE	    2
232*4882a593Smuzhiyun #define K_MC_COMMAND_AR		    3
233*4882a593Smuzhiyun #define K_MC_COMMAND_SETRFSH	    4
234*4882a593Smuzhiyun #define K_MC_COMMAND_CLRRFSH	    5
235*4882a593Smuzhiyun #define K_MC_COMMAND_SETPWRDN	    6
236*4882a593Smuzhiyun #define K_MC_COMMAND_CLRPWRDN	    7
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun #define V_MC_COMMAND_EMRS	    V_MC_COMMAND(K_MC_COMMAND_EMRS)
239*4882a593Smuzhiyun #define V_MC_COMMAND_MRS	    V_MC_COMMAND(K_MC_COMMAND_MRS)
240*4882a593Smuzhiyun #define V_MC_COMMAND_PRE	    V_MC_COMMAND(K_MC_COMMAND_PRE)
241*4882a593Smuzhiyun #define V_MC_COMMAND_AR		    V_MC_COMMAND(K_MC_COMMAND_AR)
242*4882a593Smuzhiyun #define V_MC_COMMAND_SETRFSH	    V_MC_COMMAND(K_MC_COMMAND_SETRFSH)
243*4882a593Smuzhiyun #define V_MC_COMMAND_CLRRFSH	    V_MC_COMMAND(K_MC_COMMAND_CLRRFSH)
244*4882a593Smuzhiyun #define V_MC_COMMAND_SETPWRDN	    V_MC_COMMAND(K_MC_COMMAND_SETPWRDN)
245*4882a593Smuzhiyun #define V_MC_COMMAND_CLRPWRDN	    V_MC_COMMAND(K_MC_COMMAND_CLRPWRDN)
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun #define M_MC_CS0		    _SB_MAKEMASK1(4)
248*4882a593Smuzhiyun #define M_MC_CS1		    _SB_MAKEMASK1(5)
249*4882a593Smuzhiyun #define M_MC_CS2		    _SB_MAKEMASK1(6)
250*4882a593Smuzhiyun #define M_MC_CS3		    _SB_MAKEMASK1(7)
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun /*
253*4882a593Smuzhiyun  * DRAM Mode Register (Table 6-14)
254*4882a593Smuzhiyun  */
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun #define S_MC_EMODE		    0
257*4882a593Smuzhiyun #define M_MC_EMODE		    _SB_MAKEMASK(15, S_MC_EMODE)
258*4882a593Smuzhiyun #define V_MC_EMODE(x)		    _SB_MAKEVALUE(x, S_MC_EMODE)
259*4882a593Smuzhiyun #define G_MC_EMODE(x)		    _SB_GETVALUE(x, S_MC_EMODE, M_MC_EMODE)
260*4882a593Smuzhiyun #define V_MC_EMODE_DEFAULT	    V_MC_EMODE(0)
261*4882a593Smuzhiyun 
262*4882a593Smuzhiyun #define S_MC_MODE		    16
263*4882a593Smuzhiyun #define M_MC_MODE		    _SB_MAKEMASK(15, S_MC_MODE)
264*4882a593Smuzhiyun #define V_MC_MODE(x)		    _SB_MAKEVALUE(x, S_MC_MODE)
265*4882a593Smuzhiyun #define G_MC_MODE(x)		    _SB_GETVALUE(x, S_MC_MODE, M_MC_MODE)
266*4882a593Smuzhiyun #define V_MC_MODE_DEFAULT	    V_MC_MODE(0x22)
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun #define S_MC_DRAM_TYPE		    32
269*4882a593Smuzhiyun #define M_MC_DRAM_TYPE		    _SB_MAKEMASK(3, S_MC_DRAM_TYPE)
270*4882a593Smuzhiyun #define V_MC_DRAM_TYPE(x)	    _SB_MAKEVALUE(x, S_MC_DRAM_TYPE)
271*4882a593Smuzhiyun #define G_MC_DRAM_TYPE(x)	    _SB_GETVALUE(x, S_MC_DRAM_TYPE, M_MC_DRAM_TYPE)
272*4882a593Smuzhiyun 
273*4882a593Smuzhiyun #define K_MC_DRAM_TYPE_JEDEC	    0
274*4882a593Smuzhiyun #define K_MC_DRAM_TYPE_FCRAM	    1
275*4882a593Smuzhiyun #define K_MC_DRAM_TYPE_SGRAM	    2
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun #define V_MC_DRAM_TYPE_JEDEC	    V_MC_DRAM_TYPE(K_MC_DRAM_TYPE_JEDEC)
278*4882a593Smuzhiyun #define V_MC_DRAM_TYPE_FCRAM	    V_MC_DRAM_TYPE(K_MC_DRAM_TYPE_FCRAM)
279*4882a593Smuzhiyun #define V_MC_DRAM_TYPE_SGRAM	    V_MC_DRAM_TYPE(K_MC_DRAM_TYPE_SGRAM)
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun #define M_MC_EXTERNALDECODE	    _SB_MAKEMASK1(35)
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun #if SIBYTE_HDR_FEATURE(1250, PASS3) || SIBYTE_HDR_FEATURE(112x, PASS1)
284*4882a593Smuzhiyun #define M_MC_PRE_ON_A8		    _SB_MAKEMASK1(36)
285*4882a593Smuzhiyun #define M_MC_RAM_WITH_A13	    _SB_MAKEMASK1(37)
286*4882a593Smuzhiyun #endif /* 1250 PASS3 || 112x PASS1 */
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun /*
291*4882a593Smuzhiyun  * SDRAM Timing Register  (Table 6-15)
292*4882a593Smuzhiyun  */
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun #define M_MC_w2rIDLE_TWOCYCLES	  _SB_MAKEMASK1(60)
295*4882a593Smuzhiyun #define M_MC_r2wIDLE_TWOCYCLES	  _SB_MAKEMASK1(61)
296*4882a593Smuzhiyun #define M_MC_r2rIDLE_TWOCYCLES	  _SB_MAKEMASK1(62)
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun #define S_MC_tFIFO		  56
299*4882a593Smuzhiyun #define M_MC_tFIFO		  _SB_MAKEMASK(4, S_MC_tFIFO)
300*4882a593Smuzhiyun #define V_MC_tFIFO(x)		  _SB_MAKEVALUE(x, S_MC_tFIFO)
301*4882a593Smuzhiyun #define G_MC_tFIFO(x)		  _SB_GETVALUE(x, S_MC_tFIFO, M_MC_tFIFO)
302*4882a593Smuzhiyun #define K_MC_tFIFO_DEFAULT	  1
303*4882a593Smuzhiyun #define V_MC_tFIFO_DEFAULT	  V_MC_tFIFO(K_MC_tFIFO_DEFAULT)
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun #define S_MC_tRFC		  52
306*4882a593Smuzhiyun #define M_MC_tRFC		  _SB_MAKEMASK(4, S_MC_tRFC)
307*4882a593Smuzhiyun #define V_MC_tRFC(x)		  _SB_MAKEVALUE(x, S_MC_tRFC)
308*4882a593Smuzhiyun #define G_MC_tRFC(x)		  _SB_GETVALUE(x, S_MC_tRFC, M_MC_tRFC)
309*4882a593Smuzhiyun #define K_MC_tRFC_DEFAULT	  12
310*4882a593Smuzhiyun #define V_MC_tRFC_DEFAULT	  V_MC_tRFC(K_MC_tRFC_DEFAULT)
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun #if SIBYTE_HDR_FEATURE(1250, PASS3)
313*4882a593Smuzhiyun #define M_MC_tRFC_PLUS16	  _SB_MAKEMASK1(51)	/* 1250C3 and later.  */
314*4882a593Smuzhiyun #endif
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun #define S_MC_tCwCr		  40
317*4882a593Smuzhiyun #define M_MC_tCwCr		  _SB_MAKEMASK(4, S_MC_tCwCr)
318*4882a593Smuzhiyun #define V_MC_tCwCr(x)		  _SB_MAKEVALUE(x, S_MC_tCwCr)
319*4882a593Smuzhiyun #define G_MC_tCwCr(x)		  _SB_GETVALUE(x, S_MC_tCwCr, M_MC_tCwCr)
320*4882a593Smuzhiyun #define K_MC_tCwCr_DEFAULT	  4
321*4882a593Smuzhiyun #define V_MC_tCwCr_DEFAULT	  V_MC_tCwCr(K_MC_tCwCr_DEFAULT)
322*4882a593Smuzhiyun 
323*4882a593Smuzhiyun #define S_MC_tRCr		  28
324*4882a593Smuzhiyun #define M_MC_tRCr		  _SB_MAKEMASK(4, S_MC_tRCr)
325*4882a593Smuzhiyun #define V_MC_tRCr(x)		  _SB_MAKEVALUE(x, S_MC_tRCr)
326*4882a593Smuzhiyun #define G_MC_tRCr(x)		  _SB_GETVALUE(x, S_MC_tRCr, M_MC_tRCr)
327*4882a593Smuzhiyun #define K_MC_tRCr_DEFAULT	  9
328*4882a593Smuzhiyun #define V_MC_tRCr_DEFAULT	  V_MC_tRCr(K_MC_tRCr_DEFAULT)
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun #define S_MC_tRCw		  24
331*4882a593Smuzhiyun #define M_MC_tRCw		  _SB_MAKEMASK(4, S_MC_tRCw)
332*4882a593Smuzhiyun #define V_MC_tRCw(x)		  _SB_MAKEVALUE(x, S_MC_tRCw)
333*4882a593Smuzhiyun #define G_MC_tRCw(x)		  _SB_GETVALUE(x, S_MC_tRCw, M_MC_tRCw)
334*4882a593Smuzhiyun #define K_MC_tRCw_DEFAULT	  10
335*4882a593Smuzhiyun #define V_MC_tRCw_DEFAULT	  V_MC_tRCw(K_MC_tRCw_DEFAULT)
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun #define S_MC_tRRD		  20
338*4882a593Smuzhiyun #define M_MC_tRRD		  _SB_MAKEMASK(4, S_MC_tRRD)
339*4882a593Smuzhiyun #define V_MC_tRRD(x)		  _SB_MAKEVALUE(x, S_MC_tRRD)
340*4882a593Smuzhiyun #define G_MC_tRRD(x)		  _SB_GETVALUE(x, S_MC_tRRD, M_MC_tRRD)
341*4882a593Smuzhiyun #define K_MC_tRRD_DEFAULT	  2
342*4882a593Smuzhiyun #define V_MC_tRRD_DEFAULT	  V_MC_tRRD(K_MC_tRRD_DEFAULT)
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun #define S_MC_tRP		  16
345*4882a593Smuzhiyun #define M_MC_tRP		  _SB_MAKEMASK(4, S_MC_tRP)
346*4882a593Smuzhiyun #define V_MC_tRP(x)		  _SB_MAKEVALUE(x, S_MC_tRP)
347*4882a593Smuzhiyun #define G_MC_tRP(x)		  _SB_GETVALUE(x, S_MC_tRP, M_MC_tRP)
348*4882a593Smuzhiyun #define K_MC_tRP_DEFAULT	  4
349*4882a593Smuzhiyun #define V_MC_tRP_DEFAULT	  V_MC_tRP(K_MC_tRP_DEFAULT)
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun #define S_MC_tCwD		  8
352*4882a593Smuzhiyun #define M_MC_tCwD		  _SB_MAKEMASK(4, S_MC_tCwD)
353*4882a593Smuzhiyun #define V_MC_tCwD(x)		  _SB_MAKEVALUE(x, S_MC_tCwD)
354*4882a593Smuzhiyun #define G_MC_tCwD(x)		  _SB_GETVALUE(x, S_MC_tCwD, M_MC_tCwD)
355*4882a593Smuzhiyun #define K_MC_tCwD_DEFAULT	  1
356*4882a593Smuzhiyun #define V_MC_tCwD_DEFAULT	  V_MC_tCwD(K_MC_tCwD_DEFAULT)
357*4882a593Smuzhiyun 
358*4882a593Smuzhiyun #define M_tCrDh			  _SB_MAKEMASK1(7)
359*4882a593Smuzhiyun #define M_MC_tCrDh		  M_tCrDh
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun #define S_MC_tCrD		  4
362*4882a593Smuzhiyun #define M_MC_tCrD		  _SB_MAKEMASK(3, S_MC_tCrD)
363*4882a593Smuzhiyun #define V_MC_tCrD(x)		  _SB_MAKEVALUE(x, S_MC_tCrD)
364*4882a593Smuzhiyun #define G_MC_tCrD(x)		  _SB_GETVALUE(x, S_MC_tCrD, M_MC_tCrD)
365*4882a593Smuzhiyun #define K_MC_tCrD_DEFAULT	  2
366*4882a593Smuzhiyun #define V_MC_tCrD_DEFAULT	  V_MC_tCrD(K_MC_tCrD_DEFAULT)
367*4882a593Smuzhiyun 
368*4882a593Smuzhiyun #define S_MC_tRCD		  0
369*4882a593Smuzhiyun #define M_MC_tRCD		  _SB_MAKEMASK(4, S_MC_tRCD)
370*4882a593Smuzhiyun #define V_MC_tRCD(x)		  _SB_MAKEVALUE(x, S_MC_tRCD)
371*4882a593Smuzhiyun #define G_MC_tRCD(x)		  _SB_GETVALUE(x, S_MC_tRCD, M_MC_tRCD)
372*4882a593Smuzhiyun #define K_MC_tRCD_DEFAULT	  3
373*4882a593Smuzhiyun #define V_MC_tRCD_DEFAULT	  V_MC_tRCD(K_MC_tRCD_DEFAULT)
374*4882a593Smuzhiyun 
375*4882a593Smuzhiyun #define V_MC_TIMING_DEFAULT	V_MC_tFIFO(K_MC_tFIFO_DEFAULT) | \
376*4882a593Smuzhiyun 				V_MC_tRFC(K_MC_tRFC_DEFAULT) | \
377*4882a593Smuzhiyun 				V_MC_tCwCr(K_MC_tCwCr_DEFAULT) | \
378*4882a593Smuzhiyun 				V_MC_tRCr(K_MC_tRCr_DEFAULT) | \
379*4882a593Smuzhiyun 				V_MC_tRCw(K_MC_tRCw_DEFAULT) | \
380*4882a593Smuzhiyun 				V_MC_tRRD(K_MC_tRRD_DEFAULT) | \
381*4882a593Smuzhiyun 				V_MC_tRP(K_MC_tRP_DEFAULT) | \
382*4882a593Smuzhiyun 				V_MC_tCwD(K_MC_tCwD_DEFAULT) | \
383*4882a593Smuzhiyun 				V_MC_tCrD(K_MC_tCrD_DEFAULT) | \
384*4882a593Smuzhiyun 				V_MC_tRCD(K_MC_tRCD_DEFAULT) | \
385*4882a593Smuzhiyun 				M_MC_r2rIDLE_TWOCYCLES
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun /*
388*4882a593Smuzhiyun  * Errata says these are not the default
389*4882a593Smuzhiyun  *				 M_MC_w2rIDLE_TWOCYCLES | \
390*4882a593Smuzhiyun  *				 M_MC_r2wIDLE_TWOCYCLES | \
391*4882a593Smuzhiyun  */
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun /*
395*4882a593Smuzhiyun  * Chip Select Start Address Register (Table 6-17)
396*4882a593Smuzhiyun  */
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun #define S_MC_CS0_START		    0
399*4882a593Smuzhiyun #define M_MC_CS0_START		    _SB_MAKEMASK(16, S_MC_CS0_START)
400*4882a593Smuzhiyun #define V_MC_CS0_START(x)	    _SB_MAKEVALUE(x, S_MC_CS0_START)
401*4882a593Smuzhiyun #define G_MC_CS0_START(x)	    _SB_GETVALUE(x, S_MC_CS0_START, M_MC_CS0_START)
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun #define S_MC_CS1_START		    16
404*4882a593Smuzhiyun #define M_MC_CS1_START		    _SB_MAKEMASK(16, S_MC_CS1_START)
405*4882a593Smuzhiyun #define V_MC_CS1_START(x)	    _SB_MAKEVALUE(x, S_MC_CS1_START)
406*4882a593Smuzhiyun #define G_MC_CS1_START(x)	    _SB_GETVALUE(x, S_MC_CS1_START, M_MC_CS1_START)
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun #define S_MC_CS2_START		    32
409*4882a593Smuzhiyun #define M_MC_CS2_START		    _SB_MAKEMASK(16, S_MC_CS2_START)
410*4882a593Smuzhiyun #define V_MC_CS2_START(x)	    _SB_MAKEVALUE(x, S_MC_CS2_START)
411*4882a593Smuzhiyun #define G_MC_CS2_START(x)	    _SB_GETVALUE(x, S_MC_CS2_START, M_MC_CS2_START)
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun #define S_MC_CS3_START		    48
414*4882a593Smuzhiyun #define M_MC_CS3_START		    _SB_MAKEMASK(16, S_MC_CS3_START)
415*4882a593Smuzhiyun #define V_MC_CS3_START(x)	    _SB_MAKEVALUE(x, S_MC_CS3_START)
416*4882a593Smuzhiyun #define G_MC_CS3_START(x)	    _SB_GETVALUE(x, S_MC_CS3_START, M_MC_CS3_START)
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun /*
419*4882a593Smuzhiyun  * Chip Select End Address Register (Table 6-18)
420*4882a593Smuzhiyun  */
421*4882a593Smuzhiyun 
422*4882a593Smuzhiyun #define S_MC_CS0_END		    0
423*4882a593Smuzhiyun #define M_MC_CS0_END		    _SB_MAKEMASK(16, S_MC_CS0_END)
424*4882a593Smuzhiyun #define V_MC_CS0_END(x)		    _SB_MAKEVALUE(x, S_MC_CS0_END)
425*4882a593Smuzhiyun #define G_MC_CS0_END(x)		    _SB_GETVALUE(x, S_MC_CS0_END, M_MC_CS0_END)
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun #define S_MC_CS1_END		    16
428*4882a593Smuzhiyun #define M_MC_CS1_END		    _SB_MAKEMASK(16, S_MC_CS1_END)
429*4882a593Smuzhiyun #define V_MC_CS1_END(x)		    _SB_MAKEVALUE(x, S_MC_CS1_END)
430*4882a593Smuzhiyun #define G_MC_CS1_END(x)		    _SB_GETVALUE(x, S_MC_CS1_END, M_MC_CS1_END)
431*4882a593Smuzhiyun 
432*4882a593Smuzhiyun #define S_MC_CS2_END		    32
433*4882a593Smuzhiyun #define M_MC_CS2_END		    _SB_MAKEMASK(16, S_MC_CS2_END)
434*4882a593Smuzhiyun #define V_MC_CS2_END(x)		    _SB_MAKEVALUE(x, S_MC_CS2_END)
435*4882a593Smuzhiyun #define G_MC_CS2_END(x)		    _SB_GETVALUE(x, S_MC_CS2_END, M_MC_CS2_END)
436*4882a593Smuzhiyun 
437*4882a593Smuzhiyun #define S_MC_CS3_END		    48
438*4882a593Smuzhiyun #define M_MC_CS3_END		    _SB_MAKEMASK(16, S_MC_CS3_END)
439*4882a593Smuzhiyun #define V_MC_CS3_END(x)		    _SB_MAKEVALUE(x, S_MC_CS3_END)
440*4882a593Smuzhiyun #define G_MC_CS3_END(x)		    _SB_GETVALUE(x, S_MC_CS3_END, M_MC_CS3_END)
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun /*
443*4882a593Smuzhiyun  * Chip Select Interleave Register (Table 6-19)
444*4882a593Smuzhiyun  */
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun #define S_MC_INTLV_RESERVED	    0
447*4882a593Smuzhiyun #define M_MC_INTLV_RESERVED	    _SB_MAKEMASK(5, S_MC_INTLV_RESERVED)
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun #define S_MC_INTERLEAVE		    7
450*4882a593Smuzhiyun #define M_MC_INTERLEAVE		    _SB_MAKEMASK(18, S_MC_INTERLEAVE)
451*4882a593Smuzhiyun #define V_MC_INTERLEAVE(x)	    _SB_MAKEVALUE(x, S_MC_INTERLEAVE)
452*4882a593Smuzhiyun 
453*4882a593Smuzhiyun #define S_MC_INTLV_MBZ		    25
454*4882a593Smuzhiyun #define M_MC_INTLV_MBZ		    _SB_MAKEMASK(39, S_MC_INTLV_MBZ)
455*4882a593Smuzhiyun 
456*4882a593Smuzhiyun /*
457*4882a593Smuzhiyun  * Row Address Bits Register (Table 6-20)
458*4882a593Smuzhiyun  */
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun #define S_MC_RAS_RESERVED	    0
461*4882a593Smuzhiyun #define M_MC_RAS_RESERVED	    _SB_MAKEMASK(5, S_MC_RAS_RESERVED)
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun #define S_MC_RAS_SELECT		    12
464*4882a593Smuzhiyun #define M_MC_RAS_SELECT		    _SB_MAKEMASK(25, S_MC_RAS_SELECT)
465*4882a593Smuzhiyun #define V_MC_RAS_SELECT(x)	    _SB_MAKEVALUE(x, S_MC_RAS_SELECT)
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun #define S_MC_RAS_MBZ		    37
468*4882a593Smuzhiyun #define M_MC_RAS_MBZ		    _SB_MAKEMASK(27, S_MC_RAS_MBZ)
469*4882a593Smuzhiyun 
470*4882a593Smuzhiyun 
471*4882a593Smuzhiyun /*
472*4882a593Smuzhiyun  * Column Address Bits Register (Table 6-21)
473*4882a593Smuzhiyun  */
474*4882a593Smuzhiyun 
475*4882a593Smuzhiyun #define S_MC_CAS_RESERVED	    0
476*4882a593Smuzhiyun #define M_MC_CAS_RESERVED	    _SB_MAKEMASK(5, S_MC_CAS_RESERVED)
477*4882a593Smuzhiyun 
478*4882a593Smuzhiyun #define S_MC_CAS_SELECT		    5
479*4882a593Smuzhiyun #define M_MC_CAS_SELECT		    _SB_MAKEMASK(18, S_MC_CAS_SELECT)
480*4882a593Smuzhiyun #define V_MC_CAS_SELECT(x)	    _SB_MAKEVALUE(x, S_MC_CAS_SELECT)
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun #define S_MC_CAS_MBZ		    23
483*4882a593Smuzhiyun #define M_MC_CAS_MBZ		    _SB_MAKEMASK(41, S_MC_CAS_MBZ)
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun 
486*4882a593Smuzhiyun /*
487*4882a593Smuzhiyun  * Bank Address Address Bits Register (Table 6-22)
488*4882a593Smuzhiyun  */
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun #define S_MC_BA_RESERVED	    0
491*4882a593Smuzhiyun #define M_MC_BA_RESERVED	    _SB_MAKEMASK(5, S_MC_BA_RESERVED)
492*4882a593Smuzhiyun 
493*4882a593Smuzhiyun #define S_MC_BA_SELECT		    5
494*4882a593Smuzhiyun #define M_MC_BA_SELECT		    _SB_MAKEMASK(20, S_MC_BA_SELECT)
495*4882a593Smuzhiyun #define V_MC_BA_SELECT(x)	    _SB_MAKEVALUE(x, S_MC_BA_SELECT)
496*4882a593Smuzhiyun 
497*4882a593Smuzhiyun #define S_MC_BA_MBZ		    25
498*4882a593Smuzhiyun #define M_MC_BA_MBZ		    _SB_MAKEMASK(39, S_MC_BA_MBZ)
499*4882a593Smuzhiyun 
500*4882a593Smuzhiyun /*
501*4882a593Smuzhiyun  * Chip Select Attribute Register (Table 6-23)
502*4882a593Smuzhiyun  */
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun #define K_MC_CS_ATTR_CLOSED	    0
505*4882a593Smuzhiyun #define K_MC_CS_ATTR_CASCHECK	    1
506*4882a593Smuzhiyun #define K_MC_CS_ATTR_HINT	    2
507*4882a593Smuzhiyun #define K_MC_CS_ATTR_OPEN	    3
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun #define S_MC_CS0_PAGE		    0
510*4882a593Smuzhiyun #define M_MC_CS0_PAGE		    _SB_MAKEMASK(2, S_MC_CS0_PAGE)
511*4882a593Smuzhiyun #define V_MC_CS0_PAGE(x)	    _SB_MAKEVALUE(x, S_MC_CS0_PAGE)
512*4882a593Smuzhiyun #define G_MC_CS0_PAGE(x)	    _SB_GETVALUE(x, S_MC_CS0_PAGE, M_MC_CS0_PAGE)
513*4882a593Smuzhiyun 
514*4882a593Smuzhiyun #define S_MC_CS1_PAGE		    16
515*4882a593Smuzhiyun #define M_MC_CS1_PAGE		    _SB_MAKEMASK(2, S_MC_CS1_PAGE)
516*4882a593Smuzhiyun #define V_MC_CS1_PAGE(x)	    _SB_MAKEVALUE(x, S_MC_CS1_PAGE)
517*4882a593Smuzhiyun #define G_MC_CS1_PAGE(x)	    _SB_GETVALUE(x, S_MC_CS1_PAGE, M_MC_CS1_PAGE)
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun #define S_MC_CS2_PAGE		    32
520*4882a593Smuzhiyun #define M_MC_CS2_PAGE		    _SB_MAKEMASK(2, S_MC_CS2_PAGE)
521*4882a593Smuzhiyun #define V_MC_CS2_PAGE(x)	    _SB_MAKEVALUE(x, S_MC_CS2_PAGE)
522*4882a593Smuzhiyun #define G_MC_CS2_PAGE(x)	    _SB_GETVALUE(x, S_MC_CS2_PAGE, M_MC_CS2_PAGE)
523*4882a593Smuzhiyun 
524*4882a593Smuzhiyun #define S_MC_CS3_PAGE		    48
525*4882a593Smuzhiyun #define M_MC_CS3_PAGE		    _SB_MAKEMASK(2, S_MC_CS3_PAGE)
526*4882a593Smuzhiyun #define V_MC_CS3_PAGE(x)	    _SB_MAKEVALUE(x, S_MC_CS3_PAGE)
527*4882a593Smuzhiyun #define G_MC_CS3_PAGE(x)	    _SB_GETVALUE(x, S_MC_CS3_PAGE, M_MC_CS3_PAGE)
528*4882a593Smuzhiyun 
529*4882a593Smuzhiyun /*
530*4882a593Smuzhiyun  * ECC Test ECC Register (Table 6-25)
531*4882a593Smuzhiyun  */
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun #define S_MC_ECC_INVERT		    0
534*4882a593Smuzhiyun #define M_MC_ECC_INVERT		    _SB_MAKEMASK(8, S_MC_ECC_INVERT)
535*4882a593Smuzhiyun 
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun #endif
538