xref: /rk3399_rockchip-uboot/include/fsl_ifc.h (revision 0b66513b2706e941b55ffc6ad5aa011e10e87960)
1*0b66513bSYork Sun /*
2*0b66513bSYork Sun  * Copyright 2010-2011 Freescale Semiconductor, Inc.
3*0b66513bSYork Sun  * Author: Dipen Dudhat <dipen.dudhat@freescale.com>
4*0b66513bSYork Sun  *
5*0b66513bSYork Sun  * SPDX-License-Identifier:	GPL-2.0+
6*0b66513bSYork Sun  */
7*0b66513bSYork Sun 
8*0b66513bSYork Sun #ifndef __FSL_IFC_H
9*0b66513bSYork Sun #define __FSL_IFC_H
10*0b66513bSYork Sun 
11*0b66513bSYork Sun #ifdef CONFIG_FSL_IFC
12*0b66513bSYork Sun #include <config.h>
13*0b66513bSYork Sun #include <common.h>
14*0b66513bSYork Sun 
15*0b66513bSYork Sun /*
16*0b66513bSYork Sun  * CSPR - Chip Select Property Register
17*0b66513bSYork Sun  */
18*0b66513bSYork Sun #define CSPR_BA				0xFFFF0000
19*0b66513bSYork Sun #define CSPR_BA_SHIFT			16
20*0b66513bSYork Sun #define CSPR_PORT_SIZE			0x00000180
21*0b66513bSYork Sun #define CSPR_PORT_SIZE_SHIFT		7
22*0b66513bSYork Sun /* Port Size 8 bit */
23*0b66513bSYork Sun #define CSPR_PORT_SIZE_8		0x00000080
24*0b66513bSYork Sun /* Port Size 16 bit */
25*0b66513bSYork Sun #define CSPR_PORT_SIZE_16		0x00000100
26*0b66513bSYork Sun /* Port Size 32 bit */
27*0b66513bSYork Sun #define CSPR_PORT_SIZE_32		0x00000180
28*0b66513bSYork Sun /* Write Protect */
29*0b66513bSYork Sun #define CSPR_WP				0x00000040
30*0b66513bSYork Sun #define CSPR_WP_SHIFT			6
31*0b66513bSYork Sun /* Machine Select */
32*0b66513bSYork Sun #define CSPR_MSEL			0x00000006
33*0b66513bSYork Sun #define CSPR_MSEL_SHIFT			1
34*0b66513bSYork Sun /* NOR */
35*0b66513bSYork Sun #define CSPR_MSEL_NOR			0x00000000
36*0b66513bSYork Sun /* NAND */
37*0b66513bSYork Sun #define CSPR_MSEL_NAND			0x00000002
38*0b66513bSYork Sun /* GPCM */
39*0b66513bSYork Sun #define CSPR_MSEL_GPCM			0x00000004
40*0b66513bSYork Sun /* Bank Valid */
41*0b66513bSYork Sun #define CSPR_V				0x00000001
42*0b66513bSYork Sun #define CSPR_V_SHIFT			0
43*0b66513bSYork Sun 
44*0b66513bSYork Sun /* Convert an address into the right format for the CSPR Registers */
45*0b66513bSYork Sun #define CSPR_PHYS_ADDR(x)		(((uint64_t)x) & 0xffff0000)
46*0b66513bSYork Sun 
47*0b66513bSYork Sun /*
48*0b66513bSYork Sun  * Address Mask Register
49*0b66513bSYork Sun  */
50*0b66513bSYork Sun #define IFC_AMASK_MASK			0xFFFF0000
51*0b66513bSYork Sun #define IFC_AMASK_SHIFT			16
52*0b66513bSYork Sun #define IFC_AMASK(n)			(IFC_AMASK_MASK << \
53*0b66513bSYork Sun 					(__ilog2(n) - IFC_AMASK_SHIFT))
54*0b66513bSYork Sun 
55*0b66513bSYork Sun /*
56*0b66513bSYork Sun  * Chip Select Option Register IFC_NAND Machine
57*0b66513bSYork Sun  */
58*0b66513bSYork Sun /* Enable ECC Encoder */
59*0b66513bSYork Sun #define CSOR_NAND_ECC_ENC_EN		0x80000000
60*0b66513bSYork Sun #define CSOR_NAND_ECC_MODE_MASK		0x30000000
61*0b66513bSYork Sun /* 4 bit correction per 520 Byte sector */
62*0b66513bSYork Sun #define CSOR_NAND_ECC_MODE_4		0x00000000
63*0b66513bSYork Sun /* 8 bit correction per 528 Byte sector */
64*0b66513bSYork Sun #define CSOR_NAND_ECC_MODE_8		0x10000000
65*0b66513bSYork Sun /* Enable ECC Decoder */
66*0b66513bSYork Sun #define CSOR_NAND_ECC_DEC_EN		0x04000000
67*0b66513bSYork Sun /* Row Address Length */
68*0b66513bSYork Sun #define CSOR_NAND_RAL_MASK		0x01800000
69*0b66513bSYork Sun #define CSOR_NAND_RAL_SHIFT		20
70*0b66513bSYork Sun #define CSOR_NAND_RAL_1			0x00000000
71*0b66513bSYork Sun #define CSOR_NAND_RAL_2			0x00800000
72*0b66513bSYork Sun #define CSOR_NAND_RAL_3			0x01000000
73*0b66513bSYork Sun #define CSOR_NAND_RAL_4			0x01800000
74*0b66513bSYork Sun /* Page Size 512b, 2k, 4k */
75*0b66513bSYork Sun #define CSOR_NAND_PGS_MASK		0x00180000
76*0b66513bSYork Sun #define CSOR_NAND_PGS_SHIFT		16
77*0b66513bSYork Sun #define CSOR_NAND_PGS_512		0x00000000
78*0b66513bSYork Sun #define CSOR_NAND_PGS_2K		0x00080000
79*0b66513bSYork Sun #define CSOR_NAND_PGS_4K		0x00100000
80*0b66513bSYork Sun /* Spare region Size */
81*0b66513bSYork Sun #define CSOR_NAND_SPRZ_MASK		0x0000E000
82*0b66513bSYork Sun #define CSOR_NAND_SPRZ_SHIFT		13
83*0b66513bSYork Sun #define CSOR_NAND_SPRZ_16		0x00000000
84*0b66513bSYork Sun #define CSOR_NAND_SPRZ_64		0x00002000
85*0b66513bSYork Sun #define CSOR_NAND_SPRZ_128		0x00004000
86*0b66513bSYork Sun #define CSOR_NAND_SPRZ_210		0x00006000
87*0b66513bSYork Sun #define CSOR_NAND_SPRZ_218		0x00008000
88*0b66513bSYork Sun #define CSOR_NAND_SPRZ_224		0x0000A000
89*0b66513bSYork Sun /* Pages Per Block */
90*0b66513bSYork Sun #define CSOR_NAND_PB_MASK		0x00000700
91*0b66513bSYork Sun #define CSOR_NAND_PB_SHIFT		8
92*0b66513bSYork Sun #define CSOR_NAND_PB(n)		((__ilog2(n) - 5) << CSOR_NAND_PB_SHIFT)
93*0b66513bSYork Sun /* Time for Read Enable High to Output High Impedance */
94*0b66513bSYork Sun #define CSOR_NAND_TRHZ_MASK		0x0000001C
95*0b66513bSYork Sun #define CSOR_NAND_TRHZ_SHIFT		2
96*0b66513bSYork Sun #define CSOR_NAND_TRHZ_20		0x00000000
97*0b66513bSYork Sun #define CSOR_NAND_TRHZ_40		0x00000004
98*0b66513bSYork Sun #define CSOR_NAND_TRHZ_60		0x00000008
99*0b66513bSYork Sun #define CSOR_NAND_TRHZ_80		0x0000000C
100*0b66513bSYork Sun #define CSOR_NAND_TRHZ_100		0x00000010
101*0b66513bSYork Sun /* Buffer control disable */
102*0b66513bSYork Sun #define CSOR_NAND_BCTLD			0x00000001
103*0b66513bSYork Sun 
104*0b66513bSYork Sun /*
105*0b66513bSYork Sun  * Chip Select Option Register - NOR Flash Mode
106*0b66513bSYork Sun  */
107*0b66513bSYork Sun /* Enable Address shift Mode */
108*0b66513bSYork Sun #define CSOR_NOR_ADM_SHFT_MODE_EN	0x80000000
109*0b66513bSYork Sun /* Page Read Enable from NOR device */
110*0b66513bSYork Sun #define CSOR_NOR_PGRD_EN		0x10000000
111*0b66513bSYork Sun /* AVD Toggle Enable during Burst Program */
112*0b66513bSYork Sun #define CSOR_NOR_AVD_TGL_PGM_EN		0x01000000
113*0b66513bSYork Sun /* Address Data Multiplexing Shift */
114*0b66513bSYork Sun #define CSOR_NOR_ADM_MASK		0x0003E000
115*0b66513bSYork Sun #define CSOR_NOR_ADM_SHIFT_SHIFT	13
116*0b66513bSYork Sun #define CSOR_NOR_ADM_SHIFT(n)	((n) << CSOR_NOR_ADM_SHIFT_SHIFT)
117*0b66513bSYork Sun /* Type of the NOR device hooked */
118*0b66513bSYork Sun #define CSOR_NOR_NOR_MODE_AYSNC_NOR	0x00000000
119*0b66513bSYork Sun #define CSOR_NOR_NOR_MODE_AVD_NOR	0x00000020
120*0b66513bSYork Sun /* Time for Read Enable High to Output High Impedance */
121*0b66513bSYork Sun #define CSOR_NOR_TRHZ_MASK		0x0000001C
122*0b66513bSYork Sun #define CSOR_NOR_TRHZ_SHIFT		2
123*0b66513bSYork Sun #define CSOR_NOR_TRHZ_20		0x00000000
124*0b66513bSYork Sun #define CSOR_NOR_TRHZ_40		0x00000004
125*0b66513bSYork Sun #define CSOR_NOR_TRHZ_60		0x00000008
126*0b66513bSYork Sun #define CSOR_NOR_TRHZ_80		0x0000000C
127*0b66513bSYork Sun #define CSOR_NOR_TRHZ_100		0x00000010
128*0b66513bSYork Sun /* Buffer control disable */
129*0b66513bSYork Sun #define CSOR_NOR_BCTLD			0x00000001
130*0b66513bSYork Sun 
131*0b66513bSYork Sun /*
132*0b66513bSYork Sun  * Chip Select Option Register - GPCM Mode
133*0b66513bSYork Sun  */
134*0b66513bSYork Sun /* GPCM Mode - Normal */
135*0b66513bSYork Sun #define CSOR_GPCM_GPMODE_NORMAL		0x00000000
136*0b66513bSYork Sun /* GPCM Mode - GenericASIC */
137*0b66513bSYork Sun #define CSOR_GPCM_GPMODE_ASIC		0x80000000
138*0b66513bSYork Sun /* Parity Mode odd/even */
139*0b66513bSYork Sun #define CSOR_GPCM_PARITY_EVEN		0x40000000
140*0b66513bSYork Sun /* Parity Checking enable/disable */
141*0b66513bSYork Sun #define CSOR_GPCM_PAR_EN		0x20000000
142*0b66513bSYork Sun /* GPCM Timeout Count */
143*0b66513bSYork Sun #define CSOR_GPCM_GPTO_MASK		0x0F000000
144*0b66513bSYork Sun #define CSOR_GPCM_GPTO_SHIFT		24
145*0b66513bSYork Sun #define CSOR_GPCM_GPTO(n)	((__ilog2(n) - 8) << CSOR_GPCM_GPTO_SHIFT)
146*0b66513bSYork Sun /* GPCM External Access Termination mode for read access */
147*0b66513bSYork Sun #define CSOR_GPCM_RGETA_EXT		0x00080000
148*0b66513bSYork Sun /* GPCM External Access Termination mode for write access */
149*0b66513bSYork Sun #define CSOR_GPCM_WGETA_EXT		0x00040000
150*0b66513bSYork Sun /* Address Data Multiplexing Shift */
151*0b66513bSYork Sun #define CSOR_GPCM_ADM_MASK		0x0003E000
152*0b66513bSYork Sun #define CSOR_GPCM_ADM_SHIFT_SHIFT	13
153*0b66513bSYork Sun #define CSOR_GPCM_ADM_SHIFT(n)	((n) << CSOR_GPCM_ADM_SHIFT_SHIFT)
154*0b66513bSYork Sun /* Generic ASIC Parity error indication delay */
155*0b66513bSYork Sun #define CSOR_GPCM_GAPERRD_MASK		0x00000180
156*0b66513bSYork Sun #define CSOR_GPCM_GAPERRD_SHIFT		7
157*0b66513bSYork Sun #define CSOR_GPCM_GAPERRD(n)	(((n) - 1) << CSOR_GPCM_GAPERRD_SHIFT)
158*0b66513bSYork Sun /* Time for Read Enable High to Output High Impedance */
159*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_MASK		0x0000001C
160*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_20		0x00000000
161*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_40		0x00000004
162*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_60		0x00000008
163*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_80		0x0000000C
164*0b66513bSYork Sun #define CSOR_GPCM_TRHZ_100		0x00000010
165*0b66513bSYork Sun /* Buffer control disable */
166*0b66513bSYork Sun #define CSOR_GPCM_BCTLD			0x00000001
167*0b66513bSYork Sun 
168*0b66513bSYork Sun /*
169*0b66513bSYork Sun  * Flash Timing Registers (FTIM0 - FTIM2_CSn)
170*0b66513bSYork Sun  */
171*0b66513bSYork Sun /*
172*0b66513bSYork Sun  * FTIM0 - NAND Flash Mode
173*0b66513bSYork Sun  */
174*0b66513bSYork Sun #define FTIM0_NAND			0x7EFF3F3F
175*0b66513bSYork Sun #define FTIM0_NAND_TCCST_SHIFT	25
176*0b66513bSYork Sun #define FTIM0_NAND_TCCST(n)	((n) << FTIM0_NAND_TCCST_SHIFT)
177*0b66513bSYork Sun #define FTIM0_NAND_TWP_SHIFT	16
178*0b66513bSYork Sun #define FTIM0_NAND_TWP(n)	((n) << FTIM0_NAND_TWP_SHIFT)
179*0b66513bSYork Sun #define FTIM0_NAND_TWCHT_SHIFT	8
180*0b66513bSYork Sun #define FTIM0_NAND_TWCHT(n)	((n) << FTIM0_NAND_TWCHT_SHIFT)
181*0b66513bSYork Sun #define FTIM0_NAND_TWH_SHIFT	0
182*0b66513bSYork Sun #define FTIM0_NAND_TWH(n)	((n) << FTIM0_NAND_TWH_SHIFT)
183*0b66513bSYork Sun /*
184*0b66513bSYork Sun  * FTIM1 - NAND Flash Mode
185*0b66513bSYork Sun  */
186*0b66513bSYork Sun #define FTIM1_NAND			0xFFFF3FFF
187*0b66513bSYork Sun #define FTIM1_NAND_TADLE_SHIFT	24
188*0b66513bSYork Sun #define FTIM1_NAND_TADLE(n)	((n) << FTIM1_NAND_TADLE_SHIFT)
189*0b66513bSYork Sun #define FTIM1_NAND_TWBE_SHIFT	16
190*0b66513bSYork Sun #define FTIM1_NAND_TWBE(n)	((n) << FTIM1_NAND_TWBE_SHIFT)
191*0b66513bSYork Sun #define FTIM1_NAND_TRR_SHIFT	8
192*0b66513bSYork Sun #define FTIM1_NAND_TRR(n)	((n) << FTIM1_NAND_TRR_SHIFT)
193*0b66513bSYork Sun #define FTIM1_NAND_TRP_SHIFT	0
194*0b66513bSYork Sun #define FTIM1_NAND_TRP(n)	((n) << FTIM1_NAND_TRP_SHIFT)
195*0b66513bSYork Sun /*
196*0b66513bSYork Sun  * FTIM2 - NAND Flash Mode
197*0b66513bSYork Sun  */
198*0b66513bSYork Sun #define FTIM2_NAND			0x1FE1F8FF
199*0b66513bSYork Sun #define FTIM2_NAND_TRAD_SHIFT	21
200*0b66513bSYork Sun #define FTIM2_NAND_TRAD(n)	((n) << FTIM2_NAND_TRAD_SHIFT)
201*0b66513bSYork Sun #define FTIM2_NAND_TREH_SHIFT	11
202*0b66513bSYork Sun #define FTIM2_NAND_TREH(n)	((n) << FTIM2_NAND_TREH_SHIFT)
203*0b66513bSYork Sun #define FTIM2_NAND_TWHRE_SHIFT	0
204*0b66513bSYork Sun #define FTIM2_NAND_TWHRE(n)	((n) << FTIM2_NAND_TWHRE_SHIFT)
205*0b66513bSYork Sun /*
206*0b66513bSYork Sun  * FTIM3 - NAND Flash Mode
207*0b66513bSYork Sun  */
208*0b66513bSYork Sun #define FTIM3_NAND			0xFF000000
209*0b66513bSYork Sun #define FTIM3_NAND_TWW_SHIFT	24
210*0b66513bSYork Sun #define FTIM3_NAND_TWW(n)	((n) << FTIM3_NAND_TWW_SHIFT)
211*0b66513bSYork Sun 
212*0b66513bSYork Sun /*
213*0b66513bSYork Sun  * FTIM0 - NOR Flash Mode
214*0b66513bSYork Sun  */
215*0b66513bSYork Sun #define FTIM0_NOR			0xF03F3F3F
216*0b66513bSYork Sun #define FTIM0_NOR_TACSE_SHIFT	28
217*0b66513bSYork Sun #define FTIM0_NOR_TACSE(n)	((n) << FTIM0_NOR_TACSE_SHIFT)
218*0b66513bSYork Sun #define FTIM0_NOR_TEADC_SHIFT	16
219*0b66513bSYork Sun #define FTIM0_NOR_TEADC(n)	((n) << FTIM0_NOR_TEADC_SHIFT)
220*0b66513bSYork Sun #define FTIM0_NOR_TAVDS_SHIFT	8
221*0b66513bSYork Sun #define FTIM0_NOR_TAVDS(n)	((n) << FTIM0_NOR_TAVDS_SHIFT)
222*0b66513bSYork Sun #define FTIM0_NOR_TEAHC_SHIFT	0
223*0b66513bSYork Sun #define FTIM0_NOR_TEAHC(n)	((n) << FTIM0_NOR_TEAHC_SHIFT)
224*0b66513bSYork Sun /*
225*0b66513bSYork Sun  * FTIM1 - NOR Flash Mode
226*0b66513bSYork Sun  */
227*0b66513bSYork Sun #define FTIM1_NOR			0xFF003F3F
228*0b66513bSYork Sun #define FTIM1_NOR_TACO_SHIFT	24
229*0b66513bSYork Sun #define FTIM1_NOR_TACO(n)	((n) << FTIM1_NOR_TACO_SHIFT)
230*0b66513bSYork Sun #define FTIM1_NOR_TRAD_NOR_SHIFT	8
231*0b66513bSYork Sun #define FTIM1_NOR_TRAD_NOR(n)	((n) << FTIM1_NOR_TRAD_NOR_SHIFT)
232*0b66513bSYork Sun #define FTIM1_NOR_TSEQRAD_NOR_SHIFT	0
233*0b66513bSYork Sun #define FTIM1_NOR_TSEQRAD_NOR(n)	((n) << FTIM1_NOR_TSEQRAD_NOR_SHIFT)
234*0b66513bSYork Sun /*
235*0b66513bSYork Sun  * FTIM2 - NOR Flash Mode
236*0b66513bSYork Sun  */
237*0b66513bSYork Sun #define FTIM2_NOR			0x0F3CFCFF
238*0b66513bSYork Sun #define FTIM2_NOR_TCS_SHIFT		24
239*0b66513bSYork Sun #define FTIM2_NOR_TCS(n)	((n) << FTIM2_NOR_TCS_SHIFT)
240*0b66513bSYork Sun #define FTIM2_NOR_TCH_SHIFT		18
241*0b66513bSYork Sun #define FTIM2_NOR_TCH(n)	((n) << FTIM2_NOR_TCH_SHIFT)
242*0b66513bSYork Sun #define FTIM2_NOR_TWPH_SHIFT	10
243*0b66513bSYork Sun #define FTIM2_NOR_TWPH(n)	((n) << FTIM2_NOR_TWPH_SHIFT)
244*0b66513bSYork Sun #define FTIM2_NOR_TWP_SHIFT		0
245*0b66513bSYork Sun #define FTIM2_NOR_TWP(n)	((n) << FTIM2_NOR_TWP_SHIFT)
246*0b66513bSYork Sun 
247*0b66513bSYork Sun /*
248*0b66513bSYork Sun  * FTIM0 - Normal GPCM Mode
249*0b66513bSYork Sun  */
250*0b66513bSYork Sun #define FTIM0_GPCM			0xF03F3F3F
251*0b66513bSYork Sun #define FTIM0_GPCM_TACSE_SHIFT	28
252*0b66513bSYork Sun #define FTIM0_GPCM_TACSE(n)	((n) << FTIM0_GPCM_TACSE_SHIFT)
253*0b66513bSYork Sun #define FTIM0_GPCM_TEADC_SHIFT	16
254*0b66513bSYork Sun #define FTIM0_GPCM_TEADC(n)	((n) << FTIM0_GPCM_TEADC_SHIFT)
255*0b66513bSYork Sun #define FTIM0_GPCM_TAVDS_SHIFT	8
256*0b66513bSYork Sun #define FTIM0_GPCM_TAVDS(n)	((n) << FTIM0_GPCM_TAVDS_SHIFT)
257*0b66513bSYork Sun #define FTIM0_GPCM_TEAHC_SHIFT	0
258*0b66513bSYork Sun #define FTIM0_GPCM_TEAHC(n)	((n) << FTIM0_GPCM_TEAHC_SHIFT)
259*0b66513bSYork Sun /*
260*0b66513bSYork Sun  * FTIM1 - Normal GPCM Mode
261*0b66513bSYork Sun  */
262*0b66513bSYork Sun #define FTIM1_GPCM			0xFF003F00
263*0b66513bSYork Sun #define FTIM1_GPCM_TACO_SHIFT	24
264*0b66513bSYork Sun #define FTIM1_GPCM_TACO(n)	((n) << FTIM1_GPCM_TACO_SHIFT)
265*0b66513bSYork Sun #define FTIM1_GPCM_TRAD_SHIFT	8
266*0b66513bSYork Sun #define FTIM1_GPCM_TRAD(n)	((n) << FTIM1_GPCM_TRAD_SHIFT)
267*0b66513bSYork Sun /*
268*0b66513bSYork Sun  * FTIM2 - Normal GPCM Mode
269*0b66513bSYork Sun  */
270*0b66513bSYork Sun #define FTIM2_GPCM			0x0F3C00FF
271*0b66513bSYork Sun #define FTIM2_GPCM_TCS_SHIFT	24
272*0b66513bSYork Sun #define FTIM2_GPCM_TCS(n)	((n) << FTIM2_GPCM_TCS_SHIFT)
273*0b66513bSYork Sun #define FTIM2_GPCM_TCH_SHIFT	18
274*0b66513bSYork Sun #define FTIM2_GPCM_TCH(n)	((n) << FTIM2_GPCM_TCH_SHIFT)
275*0b66513bSYork Sun #define FTIM2_GPCM_TWP_SHIFT	0
276*0b66513bSYork Sun #define FTIM2_GPCM_TWP(n)	((n) << FTIM2_GPCM_TWP_SHIFT)
277*0b66513bSYork Sun 
278*0b66513bSYork Sun /*
279*0b66513bSYork Sun  * Ready Busy Status Register (RB_STAT)
280*0b66513bSYork Sun  */
281*0b66513bSYork Sun /* CSn is READY */
282*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS0		0x80000000
283*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS1		0x40000000
284*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS2		0x20000000
285*0b66513bSYork Sun #define IFC_RB_STAT_READY_CS3		0x10000000
286*0b66513bSYork Sun 
287*0b66513bSYork Sun /*
288*0b66513bSYork Sun  * General Control Register (GCR)
289*0b66513bSYork Sun  */
290*0b66513bSYork Sun #define IFC_GCR_MASK			0x8000F800
291*0b66513bSYork Sun /* reset all IFC hardware */
292*0b66513bSYork Sun #define IFC_GCR_SOFT_RST_ALL		0x80000000
293*0b66513bSYork Sun /* Turnaroud Time of external buffer */
294*0b66513bSYork Sun #define IFC_GCR_TBCTL_TRN_TIME		0x0000F800
295*0b66513bSYork Sun #define IFC_GCR_TBCTL_TRN_TIME_SHIFT	11
296*0b66513bSYork Sun 
297*0b66513bSYork Sun /*
298*0b66513bSYork Sun  * Common Event and Error Status Register (CM_EVTER_STAT)
299*0b66513bSYork Sun  */
300*0b66513bSYork Sun /* Chip select error */
301*0b66513bSYork Sun #define IFC_CM_EVTER_STAT_CSER		0x80000000
302*0b66513bSYork Sun 
303*0b66513bSYork Sun /*
304*0b66513bSYork Sun  * Common Event and Error Enable Register (CM_EVTER_EN)
305*0b66513bSYork Sun  */
306*0b66513bSYork Sun /* Chip select error checking enable */
307*0b66513bSYork Sun #define IFC_CM_EVTER_EN_CSEREN		0x80000000
308*0b66513bSYork Sun 
309*0b66513bSYork Sun /*
310*0b66513bSYork Sun  * Common Event and Error Interrupt Enable Register (CM_EVTER_INTR_EN)
311*0b66513bSYork Sun  */
312*0b66513bSYork Sun /* Chip select error interrupt enable */
313*0b66513bSYork Sun #define IFC_CM_EVTER_INTR_EN_CSERIREN	0x80000000
314*0b66513bSYork Sun 
315*0b66513bSYork Sun /*
316*0b66513bSYork Sun  * Common Transfer Error Attribute Register-0 (CM_ERATTR0)
317*0b66513bSYork Sun  */
318*0b66513bSYork Sun /* transaction type of error Read/Write */
319*0b66513bSYork Sun #define IFC_CM_ERATTR0_ERTYP_READ	0x80000000
320*0b66513bSYork Sun #define IFC_CM_ERATTR0_ERAID		0x0FF00000
321*0b66513bSYork Sun #define IFC_CM_ERATTR0_ESRCID		0x0000FF00
322*0b66513bSYork Sun 
323*0b66513bSYork Sun /*
324*0b66513bSYork Sun  * Clock Control Register (CCR)
325*0b66513bSYork Sun  */
326*0b66513bSYork Sun #define IFC_CCR_MASK			0x0F0F8800
327*0b66513bSYork Sun /* Clock division ratio */
328*0b66513bSYork Sun #define IFC_CCR_CLK_DIV_MASK		0x0F000000
329*0b66513bSYork Sun #define IFC_CCR_CLK_DIV_SHIFT		24
330*0b66513bSYork Sun #define IFC_CCR_CLK_DIV(n)		((n-1) << IFC_CCR_CLK_DIV_SHIFT)
331*0b66513bSYork Sun /* IFC Clock Delay */
332*0b66513bSYork Sun #define IFC_CCR_CLK_DLY_MASK		0x000F0000
333*0b66513bSYork Sun #define IFC_CCR_CLK_DLY_SHIFT		16
334*0b66513bSYork Sun #define IFC_CCR_CLK_DLY(n)		((n) << IFC_CCR_CLK_DLY_SHIFT)
335*0b66513bSYork Sun /* Invert IFC clock before sending out */
336*0b66513bSYork Sun #define IFC_CCR_INV_CLK_EN		0x00008000
337*0b66513bSYork Sun /* Fedback IFC Clock */
338*0b66513bSYork Sun #define IFC_CCR_FB_IFC_CLK_SEL		0x00000800
339*0b66513bSYork Sun 
340*0b66513bSYork Sun /*
341*0b66513bSYork Sun  * Clock Status Register (CSR)
342*0b66513bSYork Sun  */
343*0b66513bSYork Sun /* Clk is stable */
344*0b66513bSYork Sun #define IFC_CSR_CLK_STAT_STABLE		0x80000000
345*0b66513bSYork Sun 
346*0b66513bSYork Sun /*
347*0b66513bSYork Sun  * IFC_NAND Machine Specific Registers
348*0b66513bSYork Sun  */
349*0b66513bSYork Sun /*
350*0b66513bSYork Sun  * NAND Configuration Register (NCFGR)
351*0b66513bSYork Sun  */
352*0b66513bSYork Sun /* Auto Boot Mode */
353*0b66513bSYork Sun #define IFC_NAND_NCFGR_BOOT		0x80000000
354*0b66513bSYork Sun /* Addressing Mode-ROW0+n/COL0 */
355*0b66513bSYork Sun #define IFC_NAND_NCFGR_ADDR_MODE_RC0	0x00000000
356*0b66513bSYork Sun /* Addressing Mode-ROW0+n/COL0+n */
357*0b66513bSYork Sun #define IFC_NAND_NCFGR_ADDR_MODE_RC1	0x00400000
358*0b66513bSYork Sun /* Number of loop iterations of FIR sequences for multi page operations */
359*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_LOOP_MASK	0x0000F000
360*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_LOOP_SHIFT	12
361*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_LOOP(n)	((n) << IFC_NAND_NCFGR_NUM_LOOP_SHIFT)
362*0b66513bSYork Sun /* Number of wait cycles */
363*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_WAIT_MASK	0x000000FF
364*0b66513bSYork Sun #define IFC_NAND_NCFGR_NUM_WAIT_SHIFT	0
365*0b66513bSYork Sun 
366*0b66513bSYork Sun /*
367*0b66513bSYork Sun  * NAND Flash Command Registers (NAND_FCR0/NAND_FCR1)
368*0b66513bSYork Sun  */
369*0b66513bSYork Sun /* General purpose FCM flash command bytes CMD0-CMD7 */
370*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD0		0xFF000000
371*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD0_SHIFT	24
372*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD1		0x00FF0000
373*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD1_SHIFT	16
374*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD2		0x0000FF00
375*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD2_SHIFT	8
376*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD3		0x000000FF
377*0b66513bSYork Sun #define IFC_NAND_FCR0_CMD3_SHIFT	0
378*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD4		0xFF000000
379*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD4_SHIFT	24
380*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD5		0x00FF0000
381*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD5_SHIFT	16
382*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD6		0x0000FF00
383*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD6_SHIFT	8
384*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD7		0x000000FF
385*0b66513bSYork Sun #define IFC_NAND_FCR1_CMD7_SHIFT	0
386*0b66513bSYork Sun 
387*0b66513bSYork Sun /*
388*0b66513bSYork Sun  * Flash ROW and COL Address Register (ROWn, COLn)
389*0b66513bSYork Sun  */
390*0b66513bSYork Sun /* Main/spare region locator */
391*0b66513bSYork Sun #define IFC_NAND_COL_MS			0x80000000
392*0b66513bSYork Sun /* Column Address */
393*0b66513bSYork Sun #define IFC_NAND_COL_CA_MASK		0x00000FFF
394*0b66513bSYork Sun 
395*0b66513bSYork Sun /*
396*0b66513bSYork Sun  * NAND Flash Byte Count Register (NAND_BC)
397*0b66513bSYork Sun  */
398*0b66513bSYork Sun /* Byte Count for read/Write */
399*0b66513bSYork Sun #define IFC_NAND_BC			0x000001FF
400*0b66513bSYork Sun 
401*0b66513bSYork Sun /*
402*0b66513bSYork Sun  * NAND Flash Instruction Registers (NAND_FIR0/NAND_FIR1/NAND_FIR2)
403*0b66513bSYork Sun  */
404*0b66513bSYork Sun /* NAND Machine specific opcodes OP0-OP14*/
405*0b66513bSYork Sun #define IFC_NAND_FIR0_OP0		0xFC000000
406*0b66513bSYork Sun #define IFC_NAND_FIR0_OP0_SHIFT		26
407*0b66513bSYork Sun #define IFC_NAND_FIR0_OP1		0x03F00000
408*0b66513bSYork Sun #define IFC_NAND_FIR0_OP1_SHIFT		20
409*0b66513bSYork Sun #define IFC_NAND_FIR0_OP2		0x000FC000
410*0b66513bSYork Sun #define IFC_NAND_FIR0_OP2_SHIFT		14
411*0b66513bSYork Sun #define IFC_NAND_FIR0_OP3		0x00003F00
412*0b66513bSYork Sun #define IFC_NAND_FIR0_OP3_SHIFT		8
413*0b66513bSYork Sun #define IFC_NAND_FIR0_OP4		0x000000FC
414*0b66513bSYork Sun #define IFC_NAND_FIR0_OP4_SHIFT		2
415*0b66513bSYork Sun #define IFC_NAND_FIR1_OP5		0xFC000000
416*0b66513bSYork Sun #define IFC_NAND_FIR1_OP5_SHIFT		26
417*0b66513bSYork Sun #define IFC_NAND_FIR1_OP6		0x03F00000
418*0b66513bSYork Sun #define IFC_NAND_FIR1_OP6_SHIFT		20
419*0b66513bSYork Sun #define IFC_NAND_FIR1_OP7		0x000FC000
420*0b66513bSYork Sun #define IFC_NAND_FIR1_OP7_SHIFT		14
421*0b66513bSYork Sun #define IFC_NAND_FIR1_OP8		0x00003F00
422*0b66513bSYork Sun #define IFC_NAND_FIR1_OP8_SHIFT		8
423*0b66513bSYork Sun #define IFC_NAND_FIR1_OP9		0x000000FC
424*0b66513bSYork Sun #define IFC_NAND_FIR1_OP9_SHIFT		2
425*0b66513bSYork Sun #define IFC_NAND_FIR2_OP10		0xFC000000
426*0b66513bSYork Sun #define IFC_NAND_FIR2_OP10_SHIFT	26
427*0b66513bSYork Sun #define IFC_NAND_FIR2_OP11		0x03F00000
428*0b66513bSYork Sun #define IFC_NAND_FIR2_OP11_SHIFT	20
429*0b66513bSYork Sun #define IFC_NAND_FIR2_OP12		0x000FC000
430*0b66513bSYork Sun #define IFC_NAND_FIR2_OP12_SHIFT	14
431*0b66513bSYork Sun #define IFC_NAND_FIR2_OP13		0x00003F00
432*0b66513bSYork Sun #define IFC_NAND_FIR2_OP13_SHIFT	8
433*0b66513bSYork Sun #define IFC_NAND_FIR2_OP14		0x000000FC
434*0b66513bSYork Sun #define IFC_NAND_FIR2_OP14_SHIFT	2
435*0b66513bSYork Sun 
436*0b66513bSYork Sun /*
437*0b66513bSYork Sun  * Instruction opcodes to be programmed
438*0b66513bSYork Sun  * in FIR registers- 6bits
439*0b66513bSYork Sun  */
440*0b66513bSYork Sun enum ifc_nand_fir_opcodes {
441*0b66513bSYork Sun 	IFC_FIR_OP_NOP,
442*0b66513bSYork Sun 	IFC_FIR_OP_CA0,
443*0b66513bSYork Sun 	IFC_FIR_OP_CA1,
444*0b66513bSYork Sun 	IFC_FIR_OP_CA2,
445*0b66513bSYork Sun 	IFC_FIR_OP_CA3,
446*0b66513bSYork Sun 	IFC_FIR_OP_RA0,
447*0b66513bSYork Sun 	IFC_FIR_OP_RA1,
448*0b66513bSYork Sun 	IFC_FIR_OP_RA2,
449*0b66513bSYork Sun 	IFC_FIR_OP_RA3,
450*0b66513bSYork Sun 	IFC_FIR_OP_CMD0,
451*0b66513bSYork Sun 	IFC_FIR_OP_CMD1,
452*0b66513bSYork Sun 	IFC_FIR_OP_CMD2,
453*0b66513bSYork Sun 	IFC_FIR_OP_CMD3,
454*0b66513bSYork Sun 	IFC_FIR_OP_CMD4,
455*0b66513bSYork Sun 	IFC_FIR_OP_CMD5,
456*0b66513bSYork Sun 	IFC_FIR_OP_CMD6,
457*0b66513bSYork Sun 	IFC_FIR_OP_CMD7,
458*0b66513bSYork Sun 	IFC_FIR_OP_CW0,
459*0b66513bSYork Sun 	IFC_FIR_OP_CW1,
460*0b66513bSYork Sun 	IFC_FIR_OP_CW2,
461*0b66513bSYork Sun 	IFC_FIR_OP_CW3,
462*0b66513bSYork Sun 	IFC_FIR_OP_CW4,
463*0b66513bSYork Sun 	IFC_FIR_OP_CW5,
464*0b66513bSYork Sun 	IFC_FIR_OP_CW6,
465*0b66513bSYork Sun 	IFC_FIR_OP_CW7,
466*0b66513bSYork Sun 	IFC_FIR_OP_WBCD,
467*0b66513bSYork Sun 	IFC_FIR_OP_RBCD,
468*0b66513bSYork Sun 	IFC_FIR_OP_BTRD,
469*0b66513bSYork Sun 	IFC_FIR_OP_RDSTAT,
470*0b66513bSYork Sun 	IFC_FIR_OP_NWAIT,
471*0b66513bSYork Sun 	IFC_FIR_OP_WFR,
472*0b66513bSYork Sun 	IFC_FIR_OP_SBRD,
473*0b66513bSYork Sun 	IFC_FIR_OP_UA,
474*0b66513bSYork Sun 	IFC_FIR_OP_RB,
475*0b66513bSYork Sun };
476*0b66513bSYork Sun 
477*0b66513bSYork Sun /*
478*0b66513bSYork Sun  * NAND Chip Select Register (NAND_CSEL)
479*0b66513bSYork Sun  */
480*0b66513bSYork Sun #define IFC_NAND_CSEL			0x0C000000
481*0b66513bSYork Sun #define IFC_NAND_CSEL_SHIFT		26
482*0b66513bSYork Sun #define IFC_NAND_CSEL_CS0		0x00000000
483*0b66513bSYork Sun #define IFC_NAND_CSEL_CS1		0x04000000
484*0b66513bSYork Sun #define IFC_NAND_CSEL_CS2		0x08000000
485*0b66513bSYork Sun #define IFC_NAND_CSEL_CS3		0x0C000000
486*0b66513bSYork Sun 
487*0b66513bSYork Sun /*
488*0b66513bSYork Sun  * NAND Operation Sequence Start (NANDSEQ_STRT)
489*0b66513bSYork Sun  */
490*0b66513bSYork Sun /* NAND Flash Operation Start */
491*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_FIR_STRT	0x80000000
492*0b66513bSYork Sun /* Automatic Erase */
493*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_ERS	0x00800000
494*0b66513bSYork Sun /* Automatic Program */
495*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_PGM	0x00100000
496*0b66513bSYork Sun /* Automatic Copyback */
497*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_CPB	0x00020000
498*0b66513bSYork Sun /* Automatic Read Operation */
499*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_RD	0x00004000
500*0b66513bSYork Sun /* Automatic Status Read */
501*0b66513bSYork Sun #define IFC_NAND_SEQ_STRT_AUTO_STAT_RD	0x00000800
502*0b66513bSYork Sun 
503*0b66513bSYork Sun /*
504*0b66513bSYork Sun  * NAND Event and Error Status Register (NAND_EVTER_STAT)
505*0b66513bSYork Sun  */
506*0b66513bSYork Sun /* Operation Complete */
507*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_OPC		0x80000000
508*0b66513bSYork Sun /* Flash Timeout Error */
509*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_FTOER	0x08000000
510*0b66513bSYork Sun /* Write Protect Error */
511*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_WPER	0x04000000
512*0b66513bSYork Sun /* ECC Error */
513*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_ECCER	0x02000000
514*0b66513bSYork Sun /* RCW Load Done */
515*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_RCW_DN	0x00008000
516*0b66513bSYork Sun /* Boot Loadr Done */
517*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_BOOT_DN	0x00004000
518*0b66513bSYork Sun /* Bad Block Indicator search select */
519*0b66513bSYork Sun #define IFC_NAND_EVTER_STAT_BBI_SRCH_SE	0x00000800
520*0b66513bSYork Sun 
521*0b66513bSYork Sun /*
522*0b66513bSYork Sun  * NAND Flash Page Read Completion Event Status Register
523*0b66513bSYork Sun  * (PGRDCMPL_EVT_STAT)
524*0b66513bSYork Sun  */
525*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_MASK		0xFFFF0000
526*0b66513bSYork Sun /* Small Page 0-15 Done */
527*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_SECTION_SP(n)	(1 << (31 - (n)))
528*0b66513bSYork Sun /* Large Page(2K) 0-3 Done */
529*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_LP_2K(n)	(0xF << (28 - (n)*4))
530*0b66513bSYork Sun /* Large Page(4K) 0-1 Done */
531*0b66513bSYork Sun #define PGRDCMPL_EVT_STAT_LP_4K(n)	(0xFF << (24 - (n)*8))
532*0b66513bSYork Sun 
533*0b66513bSYork Sun /*
534*0b66513bSYork Sun  * NAND Event and Error Enable Register (NAND_EVTER_EN)
535*0b66513bSYork Sun  */
536*0b66513bSYork Sun /* Operation complete event enable */
537*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_OPC_EN	0x80000000
538*0b66513bSYork Sun /* Page read complete event enable */
539*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_PGRDCMPL_EN	0x20000000
540*0b66513bSYork Sun /* Flash Timeout error enable */
541*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_FTOER_EN	0x08000000
542*0b66513bSYork Sun /* Write Protect error enable */
543*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_WPER_EN	0x04000000
544*0b66513bSYork Sun /* ECC error logging enable */
545*0b66513bSYork Sun #define IFC_NAND_EVTER_EN_ECCER_EN	0x02000000
546*0b66513bSYork Sun 
547*0b66513bSYork Sun /*
548*0b66513bSYork Sun  * NAND Event and Error Interrupt Enable Register (NAND_EVTER_INTR_EN)
549*0b66513bSYork Sun  */
550*0b66513bSYork Sun /* Enable interrupt for operation complete */
551*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_OPCIR_EN		0x80000000
552*0b66513bSYork Sun /* Enable interrupt for Page read complete */
553*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_PGRDCMPLIR_EN	0x20000000
554*0b66513bSYork Sun /* Enable interrupt for Flash timeout error */
555*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_FTOERIR_EN		0x08000000
556*0b66513bSYork Sun /* Enable interrupt for Write protect error */
557*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_WPERIR_EN		0x04000000
558*0b66513bSYork Sun /* Enable interrupt for ECC error*/
559*0b66513bSYork Sun #define IFC_NAND_EVTER_INTR_ECCERIR_EN		0x02000000
560*0b66513bSYork Sun 
561*0b66513bSYork Sun /*
562*0b66513bSYork Sun  * NAND Transfer Error Attribute Register-0 (NAND_ERATTR0)
563*0b66513bSYork Sun  */
564*0b66513bSYork Sun #define IFC_NAND_ERATTR0_MASK		0x0C080000
565*0b66513bSYork Sun /* Error on CS0-3 for NAND */
566*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS0	0x00000000
567*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS1	0x04000000
568*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS2	0x08000000
569*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERCS_CS3	0x0C000000
570*0b66513bSYork Sun /* Transaction type of error Read/Write */
571*0b66513bSYork Sun #define IFC_NAND_ERATTR0_ERTTYPE_READ	0x00080000
572*0b66513bSYork Sun 
573*0b66513bSYork Sun /*
574*0b66513bSYork Sun  * NAND Flash Status Register (NAND_FSR)
575*0b66513bSYork Sun  */
576*0b66513bSYork Sun /* First byte of data read from read status op */
577*0b66513bSYork Sun #define IFC_NAND_NFSR_RS0		0xFF000000
578*0b66513bSYork Sun /* Second byte of data read from read status op */
579*0b66513bSYork Sun #define IFC_NAND_NFSR_RS1		0x00FF0000
580*0b66513bSYork Sun 
581*0b66513bSYork Sun /*
582*0b66513bSYork Sun  * ECC Error Status Registers (ECCSTAT0-ECCSTAT3)
583*0b66513bSYork Sun  */
584*0b66513bSYork Sun /* Number of ECC errors on sector n (n = 0-15) */
585*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR0_MASK	0x0F000000
586*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR0_SHIFT	24
587*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR1_MASK	0x000F0000
588*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR1_SHIFT	16
589*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR2_MASK	0x00000F00
590*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR2_SHIFT	8
591*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR3_MASK	0x0000000F
592*0b66513bSYork Sun #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR3_SHIFT	0
593*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR4_MASK	0x0F000000
594*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR4_SHIFT	24
595*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR5_MASK	0x000F0000
596*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR5_SHIFT	16
597*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR6_MASK	0x00000F00
598*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR6_SHIFT	8
599*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR7_MASK	0x0000000F
600*0b66513bSYork Sun #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR7_SHIFT	0
601*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR8_MASK	0x0F000000
602*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR8_SHIFT	24
603*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR9_MASK	0x000F0000
604*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR9_SHIFT	16
605*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR10_MASK	0x00000F00
606*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR10_SHIFT	8
607*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR11_MASK	0x0000000F
608*0b66513bSYork Sun #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR11_SHIFT	0
609*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR12_MASK	0x0F000000
610*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR12_SHIFT	24
611*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR13_MASK	0x000F0000
612*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR13_SHIFT	16
613*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR14_MASK	0x00000F00
614*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR14_SHIFT	8
615*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR15_MASK	0x0000000F
616*0b66513bSYork Sun #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR15_SHIFT	0
617*0b66513bSYork Sun 
618*0b66513bSYork Sun /*
619*0b66513bSYork Sun  * NAND Control Register (NANDCR)
620*0b66513bSYork Sun  */
621*0b66513bSYork Sun #define IFC_NAND_NCR_FTOCNT_MASK	0x1E000000
622*0b66513bSYork Sun #define IFC_NAND_NCR_FTOCNT_SHIFT	25
623*0b66513bSYork Sun #define IFC_NAND_NCR_FTOCNT(n)	((_ilog2(n) - 8)  << IFC_NAND_NCR_FTOCNT_SHIFT)
624*0b66513bSYork Sun 
625*0b66513bSYork Sun /*
626*0b66513bSYork Sun  * NAND_AUTOBOOT_TRGR
627*0b66513bSYork Sun  */
628*0b66513bSYork Sun /* Trigger RCW load */
629*0b66513bSYork Sun #define IFC_NAND_AUTOBOOT_TRGR_RCW_LD	0x80000000
630*0b66513bSYork Sun /* Trigget Auto Boot */
631*0b66513bSYork Sun #define IFC_NAND_AUTOBOOT_TRGR_BOOT_LD	0x20000000
632*0b66513bSYork Sun 
633*0b66513bSYork Sun /*
634*0b66513bSYork Sun  * NAND_MDR
635*0b66513bSYork Sun  */
636*0b66513bSYork Sun /* 1st read data byte when opcode SBRD */
637*0b66513bSYork Sun #define IFC_NAND_MDR_RDATA0		0xFF000000
638*0b66513bSYork Sun /* 2nd read data byte when opcode SBRD */
639*0b66513bSYork Sun #define IFC_NAND_MDR_RDATA1		0x00FF0000
640*0b66513bSYork Sun 
641*0b66513bSYork Sun /*
642*0b66513bSYork Sun  * NOR Machine Specific Registers
643*0b66513bSYork Sun  */
644*0b66513bSYork Sun /*
645*0b66513bSYork Sun  * NOR Event and Error Status Register (NOR_EVTER_STAT)
646*0b66513bSYork Sun  */
647*0b66513bSYork Sun /* NOR Command Sequence Operation Complete */
648*0b66513bSYork Sun #define IFC_NOR_EVTER_STAT_OPC_NOR	0x80000000
649*0b66513bSYork Sun /* Write Protect Error */
650*0b66513bSYork Sun #define IFC_NOR_EVTER_STAT_WPER		0x04000000
651*0b66513bSYork Sun /* Command Sequence Timeout Error */
652*0b66513bSYork Sun #define IFC_NOR_EVTER_STAT_STOER	0x01000000
653*0b66513bSYork Sun 
654*0b66513bSYork Sun /*
655*0b66513bSYork Sun  * NOR Event and Error Enable Register (NOR_EVTER_EN)
656*0b66513bSYork Sun  */
657*0b66513bSYork Sun /* NOR Command Seq complete event enable */
658*0b66513bSYork Sun #define IFC_NOR_EVTER_EN_OPCEN_NOR	0x80000000
659*0b66513bSYork Sun /* Write Protect Error Checking Enable */
660*0b66513bSYork Sun #define IFC_NOR_EVTER_EN_WPEREN		0x04000000
661*0b66513bSYork Sun /* Timeout Error Enable */
662*0b66513bSYork Sun #define IFC_NOR_EVTER_EN_STOEREN	0x01000000
663*0b66513bSYork Sun 
664*0b66513bSYork Sun /*
665*0b66513bSYork Sun  * NOR Event and Error Interrupt Enable Register (NOR_EVTER_INTR_EN)
666*0b66513bSYork Sun  */
667*0b66513bSYork Sun /* Enable interrupt for OPC complete */
668*0b66513bSYork Sun #define IFC_NOR_EVTER_INTR_OPCEN_NOR	0x80000000
669*0b66513bSYork Sun /* Enable interrupt for write protect error */
670*0b66513bSYork Sun #define IFC_NOR_EVTER_INTR_WPEREN	0x04000000
671*0b66513bSYork Sun /* Enable interrupt for timeout error */
672*0b66513bSYork Sun #define IFC_NOR_EVTER_INTR_STOEREN	0x01000000
673*0b66513bSYork Sun 
674*0b66513bSYork Sun /*
675*0b66513bSYork Sun  * NOR Transfer Error Attribute Register-0 (NOR_ERATTR0)
676*0b66513bSYork Sun  */
677*0b66513bSYork Sun /* Source ID for error transaction */
678*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERSRCID		0xFF000000
679*0b66513bSYork Sun /* AXI ID for error transation */
680*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERAID		0x000FF000
681*0b66513bSYork Sun /* Chip select corresponds to NOR error */
682*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS0	0x00000000
683*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS1	0x00000010
684*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS2	0x00000020
685*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERCS_CS3	0x00000030
686*0b66513bSYork Sun /* Type of transaction read/write */
687*0b66513bSYork Sun #define IFC_NOR_ERATTR0_ERTYPE_READ	0x00000001
688*0b66513bSYork Sun 
689*0b66513bSYork Sun /*
690*0b66513bSYork Sun  * NOR Transfer Error Attribute Register-2 (NOR_ERATTR2)
691*0b66513bSYork Sun  */
692*0b66513bSYork Sun #define IFC_NOR_ERATTR2_ER_NUM_PHASE_EXP	0x000F0000
693*0b66513bSYork Sun #define IFC_NOR_ERATTR2_ER_NUM_PHASE_PER	0x00000F00
694*0b66513bSYork Sun 
695*0b66513bSYork Sun /*
696*0b66513bSYork Sun  * NOR Control Register (NORCR)
697*0b66513bSYork Sun  */
698*0b66513bSYork Sun #define IFC_NORCR_MASK			0x0F0F0000
699*0b66513bSYork Sun /* No. of Address/Data Phase */
700*0b66513bSYork Sun #define IFC_NORCR_NUM_PHASE_MASK	0x0F000000
701*0b66513bSYork Sun #define IFC_NORCR_NUM_PHASE_SHIFT	24
702*0b66513bSYork Sun #define IFC_NORCR_NUM_PHASE(n)	((n-1) << IFC_NORCR_NUM_PHASE_SHIFT)
703*0b66513bSYork Sun /* Sequence Timeout Count */
704*0b66513bSYork Sun #define IFC_NORCR_STOCNT_MASK		0x000F0000
705*0b66513bSYork Sun #define IFC_NORCR_STOCNT_SHIFT		16
706*0b66513bSYork Sun #define IFC_NORCR_STOCNT(n)	((__ilog2(n) - 8) << IFC_NORCR_STOCNT_SHIFT)
707*0b66513bSYork Sun 
708*0b66513bSYork Sun /*
709*0b66513bSYork Sun  * GPCM Machine specific registers
710*0b66513bSYork Sun  */
711*0b66513bSYork Sun /*
712*0b66513bSYork Sun  * GPCM Event and Error Status Register (GPCM_EVTER_STAT)
713*0b66513bSYork Sun  */
714*0b66513bSYork Sun /* Timeout error */
715*0b66513bSYork Sun #define IFC_GPCM_EVTER_STAT_TOER	0x04000000
716*0b66513bSYork Sun /* Parity error */
717*0b66513bSYork Sun #define IFC_GPCM_EVTER_STAT_PER		0x01000000
718*0b66513bSYork Sun 
719*0b66513bSYork Sun /*
720*0b66513bSYork Sun  * GPCM Event and Error Enable Register (GPCM_EVTER_EN)
721*0b66513bSYork Sun  */
722*0b66513bSYork Sun /* Timeout error enable */
723*0b66513bSYork Sun #define IFC_GPCM_EVTER_EN_TOER_EN	0x04000000
724*0b66513bSYork Sun /* Parity error enable */
725*0b66513bSYork Sun #define IFC_GPCM_EVTER_EN_PER_EN	0x01000000
726*0b66513bSYork Sun 
727*0b66513bSYork Sun /*
728*0b66513bSYork Sun  * GPCM Event and Error Interrupt Enable Register (GPCM_EVTER_INTR_EN)
729*0b66513bSYork Sun  */
730*0b66513bSYork Sun /* Enable Interrupt for timeout error */
731*0b66513bSYork Sun #define IFC_GPCM_EEIER_TOERIR_EN	0x04000000
732*0b66513bSYork Sun /* Enable Interrupt for Parity error */
733*0b66513bSYork Sun #define IFC_GPCM_EEIER_PERIR_EN		0x01000000
734*0b66513bSYork Sun 
735*0b66513bSYork Sun /*
736*0b66513bSYork Sun  * GPCM Transfer Error Attribute Register-0 (GPCM_ERATTR0)
737*0b66513bSYork Sun  */
738*0b66513bSYork Sun /* Source ID for error transaction */
739*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERSRCID	0xFF000000
740*0b66513bSYork Sun /* AXI ID for error transaction */
741*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERAID		0x000FF000
742*0b66513bSYork Sun /* Chip select corresponds to GPCM error */
743*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS0	0x00000000
744*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS1	0x00000040
745*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS2	0x00000080
746*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERCS_CS3	0x000000C0
747*0b66513bSYork Sun /* Type of transaction read/Write */
748*0b66513bSYork Sun #define IFC_GPCM_ERATTR0_ERTYPE_READ	0x00000001
749*0b66513bSYork Sun 
750*0b66513bSYork Sun /*
751*0b66513bSYork Sun  * GPCM Transfer Error Attribute Register-2 (GPCM_ERATTR2)
752*0b66513bSYork Sun  */
753*0b66513bSYork Sun /* On which beat of address/data parity error is observed */
754*0b66513bSYork Sun #define IFC_GPCM_ERATTR2_PERR_BEAT		0x00000C00
755*0b66513bSYork Sun /* Parity Error on byte */
756*0b66513bSYork Sun #define IFC_GPCM_ERATTR2_PERR_BYTE		0x000000F0
757*0b66513bSYork Sun /* Parity Error reported in addr or data phase */
758*0b66513bSYork Sun #define IFC_GPCM_ERATTR2_PERR_DATA_PHASE	0x00000001
759*0b66513bSYork Sun 
760*0b66513bSYork Sun /*
761*0b66513bSYork Sun  * GPCM Status Register (GPCM_STAT)
762*0b66513bSYork Sun  */
763*0b66513bSYork Sun #define IFC_GPCM_STAT_BSY		0x80000000  /* GPCM is busy */
764*0b66513bSYork Sun 
765*0b66513bSYork Sun 
766*0b66513bSYork Sun #ifndef __ASSEMBLY__
767*0b66513bSYork Sun #include <asm/io.h>
768*0b66513bSYork Sun 
769*0b66513bSYork Sun extern void print_ifc_regs(void);
770*0b66513bSYork Sun extern void init_early_memctl_regs(void);
771*0b66513bSYork Sun 
772*0b66513bSYork Sun #define IFC_BASE_ADDR ((struct fsl_ifc *)CONFIG_SYS_IFC_ADDR)
773*0b66513bSYork Sun 
774*0b66513bSYork Sun #define get_ifc_cspr_ext(i) (in_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr_ext))
775*0b66513bSYork Sun #define get_ifc_cspr(i) (in_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr))
776*0b66513bSYork Sun #define get_ifc_csor_ext(i) (in_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor_ext))
777*0b66513bSYork Sun #define get_ifc_csor(i) (in_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor))
778*0b66513bSYork Sun #define get_ifc_amask(i) (in_be32(&(IFC_BASE_ADDR)->amask_cs[i].amask))
779*0b66513bSYork Sun #define get_ifc_ftim(i, j) (in_be32(&(IFC_BASE_ADDR)->ftim_cs[i].ftim[j]))
780*0b66513bSYork Sun 
781*0b66513bSYork Sun #define set_ifc_cspr_ext(i, v) (out_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr_ext, v))
782*0b66513bSYork Sun #define set_ifc_cspr(i, v) (out_be32(&(IFC_BASE_ADDR)->cspr_cs[i].cspr, v))
783*0b66513bSYork Sun #define set_ifc_csor_ext(i, v) (out_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor_ext, v))
784*0b66513bSYork Sun #define set_ifc_csor(i, v) (out_be32(&(IFC_BASE_ADDR)->csor_cs[i].csor, v))
785*0b66513bSYork Sun #define set_ifc_amask(i, v) (out_be32(&(IFC_BASE_ADDR)->amask_cs[i].amask, v))
786*0b66513bSYork Sun #define set_ifc_ftim(i, j, v) \
787*0b66513bSYork Sun 			(out_be32(&(IFC_BASE_ADDR)->ftim_cs[i].ftim[j], v))
788*0b66513bSYork Sun 
789*0b66513bSYork Sun enum ifc_chip_sel {
790*0b66513bSYork Sun 	IFC_CS0,
791*0b66513bSYork Sun 	IFC_CS1,
792*0b66513bSYork Sun 	IFC_CS2,
793*0b66513bSYork Sun 	IFC_CS3,
794*0b66513bSYork Sun 	IFC_CS4,
795*0b66513bSYork Sun 	IFC_CS5,
796*0b66513bSYork Sun 	IFC_CS6,
797*0b66513bSYork Sun 	IFC_CS7,
798*0b66513bSYork Sun };
799*0b66513bSYork Sun 
800*0b66513bSYork Sun enum ifc_ftims {
801*0b66513bSYork Sun 	IFC_FTIM0,
802*0b66513bSYork Sun 	IFC_FTIM1,
803*0b66513bSYork Sun 	IFC_FTIM2,
804*0b66513bSYork Sun 	IFC_FTIM3,
805*0b66513bSYork Sun };
806*0b66513bSYork Sun 
807*0b66513bSYork Sun /*
808*0b66513bSYork Sun  * IFC Controller NAND Machine registers
809*0b66513bSYork Sun  */
810*0b66513bSYork Sun struct fsl_ifc_nand {
811*0b66513bSYork Sun 	u32 ncfgr;
812*0b66513bSYork Sun 	u32 res1[0x4];
813*0b66513bSYork Sun 	u32 nand_fcr0;
814*0b66513bSYork Sun 	u32 nand_fcr1;
815*0b66513bSYork Sun 	u32 res2[0x8];
816*0b66513bSYork Sun 	u32 row0;
817*0b66513bSYork Sun 	u32 res3;
818*0b66513bSYork Sun 	u32 col0;
819*0b66513bSYork Sun 	u32 res4;
820*0b66513bSYork Sun 	u32 row1;
821*0b66513bSYork Sun 	u32 res5;
822*0b66513bSYork Sun 	u32 col1;
823*0b66513bSYork Sun 	u32 res6;
824*0b66513bSYork Sun 	u32 row2;
825*0b66513bSYork Sun 	u32 res7;
826*0b66513bSYork Sun 	u32 col2;
827*0b66513bSYork Sun 	u32 res8;
828*0b66513bSYork Sun 	u32 row3;
829*0b66513bSYork Sun 	u32 res9;
830*0b66513bSYork Sun 	u32 col3;
831*0b66513bSYork Sun 	u32 res10[0x24];
832*0b66513bSYork Sun 	u32 nand_fbcr;
833*0b66513bSYork Sun 	u32 res11;
834*0b66513bSYork Sun 	u32 nand_fir0;
835*0b66513bSYork Sun 	u32 nand_fir1;
836*0b66513bSYork Sun 	u32 nand_fir2;
837*0b66513bSYork Sun 	u32 res12[0x10];
838*0b66513bSYork Sun 	u32 nand_csel;
839*0b66513bSYork Sun 	u32 res13;
840*0b66513bSYork Sun 	u32 nandseq_strt;
841*0b66513bSYork Sun 	u32 res14;
842*0b66513bSYork Sun 	u32 nand_evter_stat;
843*0b66513bSYork Sun 	u32 res15;
844*0b66513bSYork Sun 	u32 pgrdcmpl_evt_stat;
845*0b66513bSYork Sun 	u32 res16[0x2];
846*0b66513bSYork Sun 	u32 nand_evter_en;
847*0b66513bSYork Sun 	u32 res17[0x2];
848*0b66513bSYork Sun 	u32 nand_evter_intr_en;
849*0b66513bSYork Sun 	u32 res18[0x2];
850*0b66513bSYork Sun 	u32 nand_erattr0;
851*0b66513bSYork Sun 	u32 nand_erattr1;
852*0b66513bSYork Sun 	u32 res19[0x10];
853*0b66513bSYork Sun 	u32 nand_fsr;
854*0b66513bSYork Sun 	u32 res20;
855*0b66513bSYork Sun 	u32 nand_eccstat[4];
856*0b66513bSYork Sun 	u32 res21[0x20];
857*0b66513bSYork Sun 	u32 nanndcr;
858*0b66513bSYork Sun 	u32 res22[0x2];
859*0b66513bSYork Sun 	u32 nand_autoboot_trgr;
860*0b66513bSYork Sun 	u32 res23;
861*0b66513bSYork Sun 	u32 nand_mdr;
862*0b66513bSYork Sun 	u32 res24[0x5C];
863*0b66513bSYork Sun };
864*0b66513bSYork Sun 
865*0b66513bSYork Sun /*
866*0b66513bSYork Sun  * IFC controller NOR Machine registers
867*0b66513bSYork Sun  */
868*0b66513bSYork Sun struct fsl_ifc_nor {
869*0b66513bSYork Sun 	u32 nor_evter_stat;
870*0b66513bSYork Sun 	u32 res1[0x2];
871*0b66513bSYork Sun 	u32 nor_evter_en;
872*0b66513bSYork Sun 	u32 res2[0x2];
873*0b66513bSYork Sun 	u32 nor_evter_intr_en;
874*0b66513bSYork Sun 	u32 res3[0x2];
875*0b66513bSYork Sun 	u32 nor_erattr0;
876*0b66513bSYork Sun 	u32 nor_erattr1;
877*0b66513bSYork Sun 	u32 nor_erattr2;
878*0b66513bSYork Sun 	u32 res4[0x4];
879*0b66513bSYork Sun 	u32 norcr;
880*0b66513bSYork Sun 	u32 res5[0xEF];
881*0b66513bSYork Sun };
882*0b66513bSYork Sun 
883*0b66513bSYork Sun /*
884*0b66513bSYork Sun  * IFC controller GPCM Machine registers
885*0b66513bSYork Sun  */
886*0b66513bSYork Sun struct fsl_ifc_gpcm {
887*0b66513bSYork Sun 	u32 gpcm_evter_stat;
888*0b66513bSYork Sun 	u32 res1[0x2];
889*0b66513bSYork Sun 	u32 gpcm_evter_en;
890*0b66513bSYork Sun 	u32 res2[0x2];
891*0b66513bSYork Sun 	u32 gpcm_evter_intr_en;
892*0b66513bSYork Sun 	u32 res3[0x2];
893*0b66513bSYork Sun 	u32 gpcm_erattr0;
894*0b66513bSYork Sun 	u32 gpcm_erattr1;
895*0b66513bSYork Sun 	u32 gpcm_erattr2;
896*0b66513bSYork Sun 	u32 gpcm_stat;
897*0b66513bSYork Sun 	u32 res4[0x1F3];
898*0b66513bSYork Sun };
899*0b66513bSYork Sun 
900*0b66513bSYork Sun #ifdef CONFIG_SYS_FSL_IFC_BANK_COUNT
901*0b66513bSYork Sun #if (CONFIG_SYS_FSL_IFC_BANK_COUNT <= 8)
902*0b66513bSYork Sun #define IFC_CSPR_REG_LEN	148
903*0b66513bSYork Sun #define IFC_AMASK_REG_LEN	144
904*0b66513bSYork Sun #define IFC_CSOR_REG_LEN	144
905*0b66513bSYork Sun #define IFC_FTIM_REG_LEN	576
906*0b66513bSYork Sun 
907*0b66513bSYork Sun #define IFC_CSPR_USED_LEN	sizeof(struct fsl_ifc_cspr) * \
908*0b66513bSYork Sun 					CONFIG_SYS_FSL_IFC_BANK_COUNT
909*0b66513bSYork Sun #define IFC_AMASK_USED_LEN	sizeof(struct fsl_ifc_amask) * \
910*0b66513bSYork Sun 					CONFIG_SYS_FSL_IFC_BANK_COUNT
911*0b66513bSYork Sun #define IFC_CSOR_USED_LEN	sizeof(struct fsl_ifc_csor) * \
912*0b66513bSYork Sun 					CONFIG_SYS_FSL_IFC_BANK_COUNT
913*0b66513bSYork Sun #define IFC_FTIM_USED_LEN	sizeof(struct fsl_ifc_ftim) * \
914*0b66513bSYork Sun 					CONFIG_SYS_FSL_IFC_BANK_COUNT
915*0b66513bSYork Sun #else
916*0b66513bSYork Sun #error IFC BANK count not vaild
917*0b66513bSYork Sun #endif
918*0b66513bSYork Sun #else
919*0b66513bSYork Sun #error IFC BANK count not defined
920*0b66513bSYork Sun #endif
921*0b66513bSYork Sun 
922*0b66513bSYork Sun struct fsl_ifc_cspr {
923*0b66513bSYork Sun 	u32 cspr_ext;
924*0b66513bSYork Sun 	u32 cspr;
925*0b66513bSYork Sun 	u32 res;
926*0b66513bSYork Sun };
927*0b66513bSYork Sun 
928*0b66513bSYork Sun struct fsl_ifc_amask {
929*0b66513bSYork Sun 	u32 amask;
930*0b66513bSYork Sun 	u32 res[0x2];
931*0b66513bSYork Sun };
932*0b66513bSYork Sun 
933*0b66513bSYork Sun struct fsl_ifc_csor {
934*0b66513bSYork Sun 	u32 csor;
935*0b66513bSYork Sun 	u32 csor_ext;
936*0b66513bSYork Sun 	u32 res;
937*0b66513bSYork Sun };
938*0b66513bSYork Sun 
939*0b66513bSYork Sun struct fsl_ifc_ftim {
940*0b66513bSYork Sun 	u32 ftim[4];
941*0b66513bSYork Sun 	u32 res[0x8];
942*0b66513bSYork Sun };
943*0b66513bSYork Sun 
944*0b66513bSYork Sun /*
945*0b66513bSYork Sun  * IFC Controller Registers
946*0b66513bSYork Sun  */
947*0b66513bSYork Sun struct fsl_ifc {
948*0b66513bSYork Sun 	u32 ifc_rev;
949*0b66513bSYork Sun 	u32 res1[0x2];
950*0b66513bSYork Sun 	struct fsl_ifc_cspr cspr_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT];
951*0b66513bSYork Sun 	u8 res2[IFC_CSPR_REG_LEN - IFC_CSPR_USED_LEN];
952*0b66513bSYork Sun 	struct fsl_ifc_amask amask_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT];
953*0b66513bSYork Sun 	u8 res3[IFC_AMASK_REG_LEN - IFC_AMASK_USED_LEN];
954*0b66513bSYork Sun 	struct fsl_ifc_csor csor_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT];
955*0b66513bSYork Sun 	u8 res4[IFC_CSOR_REG_LEN - IFC_CSOR_USED_LEN];
956*0b66513bSYork Sun 	struct fsl_ifc_ftim ftim_cs[CONFIG_SYS_FSL_IFC_BANK_COUNT];
957*0b66513bSYork Sun 	u8 res5[IFC_FTIM_REG_LEN - IFC_FTIM_USED_LEN];
958*0b66513bSYork Sun 	u32 rb_stat;
959*0b66513bSYork Sun 	u32 res6[0x2];
960*0b66513bSYork Sun 	u32 ifc_gcr;
961*0b66513bSYork Sun 	u32 res7[0x2];
962*0b66513bSYork Sun 	u32 cm_evter_stat;
963*0b66513bSYork Sun 	u32 res8[0x2];
964*0b66513bSYork Sun 	u32 cm_evter_en;
965*0b66513bSYork Sun 	u32 res9[0x2];
966*0b66513bSYork Sun 	u32 cm_evter_intr_en;
967*0b66513bSYork Sun 	u32 res10[0x2];
968*0b66513bSYork Sun 	u32 cm_erattr0;
969*0b66513bSYork Sun 	u32 cm_erattr1;
970*0b66513bSYork Sun 	u32 res11[0x2];
971*0b66513bSYork Sun 	u32 ifc_ccr;
972*0b66513bSYork Sun 	u32 ifc_csr;
973*0b66513bSYork Sun 	u32 res12[0x2EB];
974*0b66513bSYork Sun 	struct fsl_ifc_nand ifc_nand;
975*0b66513bSYork Sun 	struct fsl_ifc_nor ifc_nor;
976*0b66513bSYork Sun 	struct fsl_ifc_gpcm ifc_gpcm;
977*0b66513bSYork Sun };
978*0b66513bSYork Sun 
979*0b66513bSYork Sun #ifdef CONFIG_SYS_FSL_ERRATUM_IFC_A002769
980*0b66513bSYork Sun #undef CSPR_MSEL_NOR
981*0b66513bSYork Sun #define CSPR_MSEL_NOR	CSPR_MSEL_GPCM
982*0b66513bSYork Sun #endif
983*0b66513bSYork Sun #endif /* CONFIG_FSL_IFC */
984*0b66513bSYork Sun 
985*0b66513bSYork Sun #endif /* __ASSEMBLY__ */
986*0b66513bSYork Sun #endif /* __FSL_IFC_H */
987