xref: /openbmc/linux/include/linux/fsl_ifc.h (revision 1a59d1b8)
11a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2d2ae2e20SPrabhakar Kushwaha /* Freescale Integrated Flash Controller
3d2ae2e20SPrabhakar Kushwaha  *
4d2ae2e20SPrabhakar Kushwaha  * Copyright 2011 Freescale Semiconductor, Inc
5d2ae2e20SPrabhakar Kushwaha  *
6d2ae2e20SPrabhakar Kushwaha  * Author: Dipen Dudhat <dipen.dudhat@freescale.com>
7d2ae2e20SPrabhakar Kushwaha  */
8d2ae2e20SPrabhakar Kushwaha 
9d2ae2e20SPrabhakar Kushwaha #ifndef __ASM_FSL_IFC_H
10d2ae2e20SPrabhakar Kushwaha #define __ASM_FSL_IFC_H
11d2ae2e20SPrabhakar Kushwaha 
12d2ae2e20SPrabhakar Kushwaha #include <linux/compiler.h>
13d2ae2e20SPrabhakar Kushwaha #include <linux/types.h>
14d2ae2e20SPrabhakar Kushwaha #include <linux/io.h>
15d2ae2e20SPrabhakar Kushwaha 
16d2ae2e20SPrabhakar Kushwaha #include <linux/of_platform.h>
17d2ae2e20SPrabhakar Kushwaha #include <linux/interrupt.h>
18d2ae2e20SPrabhakar Kushwaha 
1909691661SAaron Sierra /*
2009691661SAaron Sierra  * The actual number of banks implemented depends on the IFC version
2109691661SAaron Sierra  *    - IFC version 1.0 implements 4 banks.
2209691661SAaron Sierra  *    - IFC version 1.1 onward implements 8 banks.
2309691661SAaron Sierra  */
2409691661SAaron Sierra #define FSL_IFC_BANK_COUNT 8
2509691661SAaron Sierra 
2609691661SAaron Sierra #define FSL_IFC_VERSION_MASK	0x0F0F0000
2709691661SAaron Sierra #define FSL_IFC_VERSION_1_0_0	0x01000000
2809691661SAaron Sierra #define FSL_IFC_VERSION_1_1_0	0x01010000
297a654172SRaghav Dogra #define FSL_IFC_VERSION_2_0_0	0x02000000
307a654172SRaghav Dogra 
317a654172SRaghav Dogra #define PGOFFSET_64K	(64*1024)
327a654172SRaghav Dogra #define PGOFFSET_4K	(4*1024)
33d2ae2e20SPrabhakar Kushwaha 
34d2ae2e20SPrabhakar Kushwaha /*
35d2ae2e20SPrabhakar Kushwaha  * CSPR - Chip Select Property Register
36d2ae2e20SPrabhakar Kushwaha  */
37d2ae2e20SPrabhakar Kushwaha #define CSPR_BA				0xFFFF0000
38d2ae2e20SPrabhakar Kushwaha #define CSPR_BA_SHIFT			16
39d2ae2e20SPrabhakar Kushwaha #define CSPR_PORT_SIZE			0x00000180
40d2ae2e20SPrabhakar Kushwaha #define CSPR_PORT_SIZE_SHIFT		7
41d2ae2e20SPrabhakar Kushwaha /* Port Size 8 bit */
42d2ae2e20SPrabhakar Kushwaha #define CSPR_PORT_SIZE_8		0x00000080
43d2ae2e20SPrabhakar Kushwaha /* Port Size 16 bit */
44d2ae2e20SPrabhakar Kushwaha #define CSPR_PORT_SIZE_16		0x00000100
45d2ae2e20SPrabhakar Kushwaha /* Port Size 32 bit */
46d2ae2e20SPrabhakar Kushwaha #define CSPR_PORT_SIZE_32		0x00000180
47d2ae2e20SPrabhakar Kushwaha /* Write Protect */
48d2ae2e20SPrabhakar Kushwaha #define CSPR_WP				0x00000040
49d2ae2e20SPrabhakar Kushwaha #define CSPR_WP_SHIFT			6
50d2ae2e20SPrabhakar Kushwaha /* Machine Select */
51d2ae2e20SPrabhakar Kushwaha #define CSPR_MSEL			0x00000006
52d2ae2e20SPrabhakar Kushwaha #define CSPR_MSEL_SHIFT			1
53d2ae2e20SPrabhakar Kushwaha /* NOR */
54d2ae2e20SPrabhakar Kushwaha #define CSPR_MSEL_NOR			0x00000000
55d2ae2e20SPrabhakar Kushwaha /* NAND */
56d2ae2e20SPrabhakar Kushwaha #define CSPR_MSEL_NAND			0x00000002
57d2ae2e20SPrabhakar Kushwaha /* GPCM */
58d2ae2e20SPrabhakar Kushwaha #define CSPR_MSEL_GPCM			0x00000004
59d2ae2e20SPrabhakar Kushwaha /* Bank Valid */
60d2ae2e20SPrabhakar Kushwaha #define CSPR_V				0x00000001
61d2ae2e20SPrabhakar Kushwaha #define CSPR_V_SHIFT			0
62d2ae2e20SPrabhakar Kushwaha 
63d2ae2e20SPrabhakar Kushwaha /*
64d2ae2e20SPrabhakar Kushwaha  * Address Mask Register
65d2ae2e20SPrabhakar Kushwaha  */
66d2ae2e20SPrabhakar Kushwaha #define IFC_AMASK_MASK			0xFFFF0000
67d2ae2e20SPrabhakar Kushwaha #define IFC_AMASK_SHIFT			16
68d2ae2e20SPrabhakar Kushwaha #define IFC_AMASK(n)			(IFC_AMASK_MASK << \
69d2ae2e20SPrabhakar Kushwaha 					(__ilog2(n) - IFC_AMASK_SHIFT))
70d2ae2e20SPrabhakar Kushwaha 
71d2ae2e20SPrabhakar Kushwaha /*
72d2ae2e20SPrabhakar Kushwaha  * Chip Select Option Register IFC_NAND Machine
73d2ae2e20SPrabhakar Kushwaha  */
74d2ae2e20SPrabhakar Kushwaha /* Enable ECC Encoder */
75d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_ECC_ENC_EN		0x80000000
76d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_ECC_MODE_MASK		0x30000000
77d2ae2e20SPrabhakar Kushwaha /* 4 bit correction per 520 Byte sector */
78d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_ECC_MODE_4		0x00000000
79d2ae2e20SPrabhakar Kushwaha /* 8 bit correction per 528 Byte sector */
80d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_ECC_MODE_8		0x10000000
81d2ae2e20SPrabhakar Kushwaha /* Enable ECC Decoder */
82d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_ECC_DEC_EN		0x04000000
83d2ae2e20SPrabhakar Kushwaha /* Row Address Length */
84d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_RAL_MASK		0x01800000
85d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_RAL_SHIFT		20
86d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_RAL_1			0x00000000
87d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_RAL_2			0x00800000
88d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_RAL_3			0x01000000
89d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_RAL_4			0x01800000
90d2ae2e20SPrabhakar Kushwaha /* Page Size 512b, 2k, 4k */
91d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PGS_MASK		0x00180000
92d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PGS_SHIFT		16
93d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PGS_512		0x00000000
94d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PGS_2K		0x00080000
95d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PGS_4K		0x00100000
96d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PGS_8K		0x00180000
97d2ae2e20SPrabhakar Kushwaha /* Spare region Size */
98d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_MASK		0x0000E000
99d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_SHIFT		13
100d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_16		0x00000000
101d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_64		0x00002000
102d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_128		0x00004000
103d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_210		0x00006000
104d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_218		0x00008000
105d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_224		0x0000A000
106d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_SPRZ_CSOR_EXT		0x0000C000
107d2ae2e20SPrabhakar Kushwaha /* Pages Per Block */
108d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PB_MASK		0x00000700
109d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PB_SHIFT		8
110d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_PB(n)		((__ilog2(n) - 5) << CSOR_NAND_PB_SHIFT)
111d2ae2e20SPrabhakar Kushwaha /* Time for Read Enable High to Output High Impedance */
112d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_TRHZ_MASK		0x0000001C
113d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_TRHZ_SHIFT		2
114d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_TRHZ_20		0x00000000
115d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_TRHZ_40		0x00000004
116d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_TRHZ_60		0x00000008
117d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_TRHZ_80		0x0000000C
118d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_TRHZ_100		0x00000010
119d2ae2e20SPrabhakar Kushwaha /* Buffer control disable */
120d2ae2e20SPrabhakar Kushwaha #define CSOR_NAND_BCTLD			0x00000001
121d2ae2e20SPrabhakar Kushwaha 
122d2ae2e20SPrabhakar Kushwaha /*
123d2ae2e20SPrabhakar Kushwaha  * Chip Select Option Register - NOR Flash Mode
124d2ae2e20SPrabhakar Kushwaha  */
125d2ae2e20SPrabhakar Kushwaha /* Enable Address shift Mode */
126d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_ADM_SHFT_MODE_EN	0x80000000
127d2ae2e20SPrabhakar Kushwaha /* Page Read Enable from NOR device */
128d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_PGRD_EN		0x10000000
129d2ae2e20SPrabhakar Kushwaha /* AVD Toggle Enable during Burst Program */
130d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_AVD_TGL_PGM_EN		0x01000000
131d2ae2e20SPrabhakar Kushwaha /* Address Data Multiplexing Shift */
132d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_ADM_MASK		0x0003E000
133d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_ADM_SHIFT_SHIFT	13
134d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_ADM_SHIFT(n)	((n) << CSOR_NOR_ADM_SHIFT_SHIFT)
135d2ae2e20SPrabhakar Kushwaha /* Type of the NOR device hooked */
136d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_NOR_MODE_AYSNC_NOR	0x00000000
137d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_NOR_MODE_AVD_NOR	0x00000020
138d2ae2e20SPrabhakar Kushwaha /* Time for Read Enable High to Output High Impedance */
139d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_TRHZ_MASK		0x0000001C
140d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_TRHZ_SHIFT		2
141d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_TRHZ_20		0x00000000
142d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_TRHZ_40		0x00000004
143d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_TRHZ_60		0x00000008
144d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_TRHZ_80		0x0000000C
145d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_TRHZ_100		0x00000010
146d2ae2e20SPrabhakar Kushwaha /* Buffer control disable */
147d2ae2e20SPrabhakar Kushwaha #define CSOR_NOR_BCTLD			0x00000001
148d2ae2e20SPrabhakar Kushwaha 
149d2ae2e20SPrabhakar Kushwaha /*
150d2ae2e20SPrabhakar Kushwaha  * Chip Select Option Register - GPCM Mode
151d2ae2e20SPrabhakar Kushwaha  */
152d2ae2e20SPrabhakar Kushwaha /* GPCM Mode - Normal */
153d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GPMODE_NORMAL		0x00000000
154d2ae2e20SPrabhakar Kushwaha /* GPCM Mode - GenericASIC */
155d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GPMODE_ASIC		0x80000000
156d2ae2e20SPrabhakar Kushwaha /* Parity Mode odd/even */
157d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_PARITY_EVEN		0x40000000
158d2ae2e20SPrabhakar Kushwaha /* Parity Checking enable/disable */
159d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_PAR_EN		0x20000000
160d2ae2e20SPrabhakar Kushwaha /* GPCM Timeout Count */
161d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GPTO_MASK		0x0F000000
162d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GPTO_SHIFT		24
163d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GPTO(n)	((__ilog2(n) - 8) << CSOR_GPCM_GPTO_SHIFT)
164d2ae2e20SPrabhakar Kushwaha /* GPCM External Access Termination mode for read access */
165d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_RGETA_EXT		0x00080000
166d2ae2e20SPrabhakar Kushwaha /* GPCM External Access Termination mode for write access */
167d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_WGETA_EXT		0x00040000
168d2ae2e20SPrabhakar Kushwaha /* Address Data Multiplexing Shift */
169d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_ADM_MASK		0x0003E000
170d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_ADM_SHIFT_SHIFT	13
171d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_ADM_SHIFT(n)	((n) << CSOR_GPCM_ADM_SHIFT_SHIFT)
172d2ae2e20SPrabhakar Kushwaha /* Generic ASIC Parity error indication delay */
173d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GAPERRD_MASK		0x00000180
174d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GAPERRD_SHIFT		7
175d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_GAPERRD(n)	(((n) - 1) << CSOR_GPCM_GAPERRD_SHIFT)
176d2ae2e20SPrabhakar Kushwaha /* Time for Read Enable High to Output High Impedance */
177d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_TRHZ_MASK		0x0000001C
178d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_TRHZ_20		0x00000000
179d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_TRHZ_40		0x00000004
180d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_TRHZ_60		0x00000008
181d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_TRHZ_80		0x0000000C
182d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_TRHZ_100		0x00000010
183d2ae2e20SPrabhakar Kushwaha /* Buffer control disable */
184d2ae2e20SPrabhakar Kushwaha #define CSOR_GPCM_BCTLD			0x00000001
185d2ae2e20SPrabhakar Kushwaha 
186d2ae2e20SPrabhakar Kushwaha /*
187d2ae2e20SPrabhakar Kushwaha  * Ready Busy Status Register (RB_STAT)
188d2ae2e20SPrabhakar Kushwaha  */
189d2ae2e20SPrabhakar Kushwaha /* CSn is READY */
190d2ae2e20SPrabhakar Kushwaha #define IFC_RB_STAT_READY_CS0		0x80000000
191d2ae2e20SPrabhakar Kushwaha #define IFC_RB_STAT_READY_CS1		0x40000000
192d2ae2e20SPrabhakar Kushwaha #define IFC_RB_STAT_READY_CS2		0x20000000
193d2ae2e20SPrabhakar Kushwaha #define IFC_RB_STAT_READY_CS3		0x10000000
194d2ae2e20SPrabhakar Kushwaha 
195d2ae2e20SPrabhakar Kushwaha /*
196d2ae2e20SPrabhakar Kushwaha  * General Control Register (GCR)
197d2ae2e20SPrabhakar Kushwaha  */
198d2ae2e20SPrabhakar Kushwaha #define IFC_GCR_MASK			0x8000F800
199d2ae2e20SPrabhakar Kushwaha /* reset all IFC hardware */
200d2ae2e20SPrabhakar Kushwaha #define IFC_GCR_SOFT_RST_ALL		0x80000000
201d2ae2e20SPrabhakar Kushwaha /* Turnaroud Time of external buffer */
202d2ae2e20SPrabhakar Kushwaha #define IFC_GCR_TBCTL_TRN_TIME		0x0000F800
203d2ae2e20SPrabhakar Kushwaha #define IFC_GCR_TBCTL_TRN_TIME_SHIFT	11
204d2ae2e20SPrabhakar Kushwaha 
205d2ae2e20SPrabhakar Kushwaha /*
206d2ae2e20SPrabhakar Kushwaha  * Common Event and Error Status Register (CM_EVTER_STAT)
207d2ae2e20SPrabhakar Kushwaha  */
208d2ae2e20SPrabhakar Kushwaha /* Chip select error */
209d2ae2e20SPrabhakar Kushwaha #define IFC_CM_EVTER_STAT_CSER		0x80000000
210d2ae2e20SPrabhakar Kushwaha 
211d2ae2e20SPrabhakar Kushwaha /*
212d2ae2e20SPrabhakar Kushwaha  * Common Event and Error Enable Register (CM_EVTER_EN)
213d2ae2e20SPrabhakar Kushwaha  */
214d2ae2e20SPrabhakar Kushwaha /* Chip select error checking enable */
215d2ae2e20SPrabhakar Kushwaha #define IFC_CM_EVTER_EN_CSEREN		0x80000000
216d2ae2e20SPrabhakar Kushwaha 
217d2ae2e20SPrabhakar Kushwaha /*
218d2ae2e20SPrabhakar Kushwaha  * Common Event and Error Interrupt Enable Register (CM_EVTER_INTR_EN)
219d2ae2e20SPrabhakar Kushwaha  */
220d2ae2e20SPrabhakar Kushwaha /* Chip select error interrupt enable */
221d2ae2e20SPrabhakar Kushwaha #define IFC_CM_EVTER_INTR_EN_CSERIREN	0x80000000
222d2ae2e20SPrabhakar Kushwaha 
223d2ae2e20SPrabhakar Kushwaha /*
224d2ae2e20SPrabhakar Kushwaha  * Common Transfer Error Attribute Register-0 (CM_ERATTR0)
225d2ae2e20SPrabhakar Kushwaha  */
226d2ae2e20SPrabhakar Kushwaha /* transaction type of error Read/Write */
227d2ae2e20SPrabhakar Kushwaha #define IFC_CM_ERATTR0_ERTYP_READ	0x80000000
228d2ae2e20SPrabhakar Kushwaha #define IFC_CM_ERATTR0_ERAID		0x0FF00000
229d2ae2e20SPrabhakar Kushwaha #define IFC_CM_ERATTR0_ERAID_SHIFT	20
230d2ae2e20SPrabhakar Kushwaha #define IFC_CM_ERATTR0_ESRCID		0x0000FF00
231d2ae2e20SPrabhakar Kushwaha #define IFC_CM_ERATTR0_ESRCID_SHIFT	8
232d2ae2e20SPrabhakar Kushwaha 
233d2ae2e20SPrabhakar Kushwaha /*
234d2ae2e20SPrabhakar Kushwaha  * Clock Control Register (CCR)
235d2ae2e20SPrabhakar Kushwaha  */
236d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_MASK			0x0F0F8800
237d2ae2e20SPrabhakar Kushwaha /* Clock division ratio */
238d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_CLK_DIV_MASK		0x0F000000
239d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_CLK_DIV_SHIFT		24
240d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_CLK_DIV(n)		((n-1) << IFC_CCR_CLK_DIV_SHIFT)
241d2ae2e20SPrabhakar Kushwaha /* IFC Clock Delay */
242d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_CLK_DLY_MASK		0x000F0000
243d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_CLK_DLY_SHIFT		16
244d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_CLK_DLY(n)		((n) << IFC_CCR_CLK_DLY_SHIFT)
245d2ae2e20SPrabhakar Kushwaha /* Invert IFC clock before sending out */
246d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_INV_CLK_EN		0x00008000
247d2ae2e20SPrabhakar Kushwaha /* Fedback IFC Clock */
248d2ae2e20SPrabhakar Kushwaha #define IFC_CCR_FB_IFC_CLK_SEL		0x00000800
249d2ae2e20SPrabhakar Kushwaha 
250d2ae2e20SPrabhakar Kushwaha /*
251d2ae2e20SPrabhakar Kushwaha  * Clock Status Register (CSR)
252d2ae2e20SPrabhakar Kushwaha  */
253d2ae2e20SPrabhakar Kushwaha /* Clk is stable */
254d2ae2e20SPrabhakar Kushwaha #define IFC_CSR_CLK_STAT_STABLE		0x80000000
255d2ae2e20SPrabhakar Kushwaha 
256d2ae2e20SPrabhakar Kushwaha /*
257d2ae2e20SPrabhakar Kushwaha  * IFC_NAND Machine Specific Registers
258d2ae2e20SPrabhakar Kushwaha  */
259d2ae2e20SPrabhakar Kushwaha /*
260d2ae2e20SPrabhakar Kushwaha  * NAND Configuration Register (NCFGR)
261d2ae2e20SPrabhakar Kushwaha  */
262d2ae2e20SPrabhakar Kushwaha /* Auto Boot Mode */
263d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_BOOT		0x80000000
264ff8648f2SKurt Kanzenbach /* SRAM Initialization */
265ff8648f2SKurt Kanzenbach #define IFC_NAND_NCFGR_SRAM_INIT_EN	0x20000000
266d2ae2e20SPrabhakar Kushwaha /* Addressing Mode-ROW0+n/COL0 */
267d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_ADDR_MODE_RC0	0x00000000
268d2ae2e20SPrabhakar Kushwaha /* Addressing Mode-ROW0+n/COL0+n */
269d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_ADDR_MODE_RC1	0x00400000
270d2ae2e20SPrabhakar Kushwaha /* Number of loop iterations of FIR sequences for multi page operations */
271d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_NUM_LOOP_MASK	0x0000F000
272d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_NUM_LOOP_SHIFT	12
273d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_NUM_LOOP(n)	((n) << IFC_NAND_NCFGR_NUM_LOOP_SHIFT)
274d2ae2e20SPrabhakar Kushwaha /* Number of wait cycles */
275d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_NUM_WAIT_MASK	0x000000FF
276d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCFGR_NUM_WAIT_SHIFT	0
277d2ae2e20SPrabhakar Kushwaha 
278d2ae2e20SPrabhakar Kushwaha /*
279d2ae2e20SPrabhakar Kushwaha  * NAND Flash Command Registers (NAND_FCR0/NAND_FCR1)
280d2ae2e20SPrabhakar Kushwaha  */
281d2ae2e20SPrabhakar Kushwaha /* General purpose FCM flash command bytes CMD0-CMD7 */
282d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD0		0xFF000000
283d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD0_SHIFT	24
284d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD1		0x00FF0000
285d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD1_SHIFT	16
286d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD2		0x0000FF00
287d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD2_SHIFT	8
288d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD3		0x000000FF
289d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR0_CMD3_SHIFT	0
290d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD4		0xFF000000
291d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD4_SHIFT	24
292d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD5		0x00FF0000
293d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD5_SHIFT	16
294d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD6		0x0000FF00
295d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD6_SHIFT	8
296d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD7		0x000000FF
297d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FCR1_CMD7_SHIFT	0
298d2ae2e20SPrabhakar Kushwaha 
299d2ae2e20SPrabhakar Kushwaha /*
300d2ae2e20SPrabhakar Kushwaha  * Flash ROW and COL Address Register (ROWn, COLn)
301d2ae2e20SPrabhakar Kushwaha  */
302d2ae2e20SPrabhakar Kushwaha /* Main/spare region locator */
303d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_COL_MS			0x80000000
304d2ae2e20SPrabhakar Kushwaha /* Column Address */
305d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_COL_CA_MASK		0x00000FFF
306d2ae2e20SPrabhakar Kushwaha 
307d2ae2e20SPrabhakar Kushwaha /*
308d2ae2e20SPrabhakar Kushwaha  * NAND Flash Byte Count Register (NAND_BC)
309d2ae2e20SPrabhakar Kushwaha  */
310d2ae2e20SPrabhakar Kushwaha /* Byte Count for read/Write */
311d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_BC			0x000001FF
312d2ae2e20SPrabhakar Kushwaha 
313d2ae2e20SPrabhakar Kushwaha /*
314d2ae2e20SPrabhakar Kushwaha  * NAND Flash Instruction Registers (NAND_FIR0/NAND_FIR1/NAND_FIR2)
315d2ae2e20SPrabhakar Kushwaha  */
316d2ae2e20SPrabhakar Kushwaha /* NAND Machine specific opcodes OP0-OP14*/
317d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP0		0xFC000000
318d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP0_SHIFT		26
319d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP1		0x03F00000
320d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP1_SHIFT		20
321d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP2		0x000FC000
322d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP2_SHIFT		14
323d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP3		0x00003F00
324d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP3_SHIFT		8
325d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP4		0x000000FC
326d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR0_OP4_SHIFT		2
327d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP5		0xFC000000
328d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP5_SHIFT		26
329d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP6		0x03F00000
330d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP6_SHIFT		20
331d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP7		0x000FC000
332d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP7_SHIFT		14
333d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP8		0x00003F00
334d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP8_SHIFT		8
335d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP9		0x000000FC
336d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR1_OP9_SHIFT		2
337d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP10		0xFC000000
338d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP10_SHIFT	26
339d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP11		0x03F00000
340d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP11_SHIFT	20
341d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP12		0x000FC000
342d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP12_SHIFT	14
343d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP13		0x00003F00
344d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP13_SHIFT	8
345d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP14		0x000000FC
346d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_FIR2_OP14_SHIFT	2
347d2ae2e20SPrabhakar Kushwaha 
348d2ae2e20SPrabhakar Kushwaha /*
349d2ae2e20SPrabhakar Kushwaha  * Instruction opcodes to be programmed
350d2ae2e20SPrabhakar Kushwaha  * in FIR registers- 6bits
351d2ae2e20SPrabhakar Kushwaha  */
352d2ae2e20SPrabhakar Kushwaha enum ifc_nand_fir_opcodes {
353d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_NOP,
354d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CA0,
355d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CA1,
356d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CA2,
357d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CA3,
358d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_RA0,
359d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_RA1,
360d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_RA2,
361d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_RA3,
362d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD0,
363d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD1,
364d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD2,
365d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD3,
366d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD4,
367d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD5,
368d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD6,
369d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CMD7,
370d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW0,
371d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW1,
372d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW2,
373d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW3,
374d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW4,
375d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW5,
376d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW6,
377d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_CW7,
378d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_WBCD,
379d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_RBCD,
380d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_BTRD,
381d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_RDSTAT,
382d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_NWAIT,
383d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_WFR,
384d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_SBRD,
385d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_UA,
386d2ae2e20SPrabhakar Kushwaha 	IFC_FIR_OP_RB,
387d2ae2e20SPrabhakar Kushwaha };
388d2ae2e20SPrabhakar Kushwaha 
389d2ae2e20SPrabhakar Kushwaha /*
390d2ae2e20SPrabhakar Kushwaha  * NAND Chip Select Register (NAND_CSEL)
391d2ae2e20SPrabhakar Kushwaha  */
392d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_CSEL			0x0C000000
393d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_CSEL_SHIFT		26
394d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_CSEL_CS0		0x00000000
395d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_CSEL_CS1		0x04000000
396d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_CSEL_CS2		0x08000000
397d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_CSEL_CS3		0x0C000000
398d2ae2e20SPrabhakar Kushwaha 
399d2ae2e20SPrabhakar Kushwaha /*
400d2ae2e20SPrabhakar Kushwaha  * NAND Operation Sequence Start (NANDSEQ_STRT)
401d2ae2e20SPrabhakar Kushwaha  */
402d2ae2e20SPrabhakar Kushwaha /* NAND Flash Operation Start */
403d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_SEQ_STRT_FIR_STRT	0x80000000
404d2ae2e20SPrabhakar Kushwaha /* Automatic Erase */
405d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_SEQ_STRT_AUTO_ERS	0x00800000
406d2ae2e20SPrabhakar Kushwaha /* Automatic Program */
407d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_SEQ_STRT_AUTO_PGM	0x00100000
408d2ae2e20SPrabhakar Kushwaha /* Automatic Copyback */
409d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_SEQ_STRT_AUTO_CPB	0x00020000
410d2ae2e20SPrabhakar Kushwaha /* Automatic Read Operation */
411d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_SEQ_STRT_AUTO_RD	0x00004000
412d2ae2e20SPrabhakar Kushwaha /* Automatic Status Read */
413d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_SEQ_STRT_AUTO_STAT_RD	0x00000800
414d2ae2e20SPrabhakar Kushwaha 
415d2ae2e20SPrabhakar Kushwaha /*
416d2ae2e20SPrabhakar Kushwaha  * NAND Event and Error Status Register (NAND_EVTER_STAT)
417d2ae2e20SPrabhakar Kushwaha  */
418d2ae2e20SPrabhakar Kushwaha /* Operation Complete */
419d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_STAT_OPC		0x80000000
420d2ae2e20SPrabhakar Kushwaha /* Flash Timeout Error */
421d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_STAT_FTOER	0x08000000
422d2ae2e20SPrabhakar Kushwaha /* Write Protect Error */
423d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_STAT_WPER	0x04000000
424d2ae2e20SPrabhakar Kushwaha /* ECC Error */
425d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_STAT_ECCER	0x02000000
426d2ae2e20SPrabhakar Kushwaha /* RCW Load Done */
427d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_STAT_RCW_DN	0x00008000
428d2ae2e20SPrabhakar Kushwaha /* Boot Loadr Done */
429d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_STAT_BOOT_DN	0x00004000
430d2ae2e20SPrabhakar Kushwaha /* Bad Block Indicator search select */
431d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_STAT_BBI_SRCH_SE	0x00000800
432d2ae2e20SPrabhakar Kushwaha 
433d2ae2e20SPrabhakar Kushwaha /*
434d2ae2e20SPrabhakar Kushwaha  * NAND Flash Page Read Completion Event Status Register
435d2ae2e20SPrabhakar Kushwaha  * (PGRDCMPL_EVT_STAT)
436d2ae2e20SPrabhakar Kushwaha  */
437d2ae2e20SPrabhakar Kushwaha #define PGRDCMPL_EVT_STAT_MASK		0xFFFF0000
438d2ae2e20SPrabhakar Kushwaha /* Small Page 0-15 Done */
439d2ae2e20SPrabhakar Kushwaha #define PGRDCMPL_EVT_STAT_SECTION_SP(n)	(1 << (31 - (n)))
440d2ae2e20SPrabhakar Kushwaha /* Large Page(2K) 0-3 Done */
441d2ae2e20SPrabhakar Kushwaha #define PGRDCMPL_EVT_STAT_LP_2K(n)	(0xF << (28 - (n)*4))
442d2ae2e20SPrabhakar Kushwaha /* Large Page(4K) 0-1 Done */
443d2ae2e20SPrabhakar Kushwaha #define PGRDCMPL_EVT_STAT_LP_4K(n)	(0xFF << (24 - (n)*8))
444d2ae2e20SPrabhakar Kushwaha 
445d2ae2e20SPrabhakar Kushwaha /*
446d2ae2e20SPrabhakar Kushwaha  * NAND Event and Error Enable Register (NAND_EVTER_EN)
447d2ae2e20SPrabhakar Kushwaha  */
448d2ae2e20SPrabhakar Kushwaha /* Operation complete event enable */
449d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_EN_OPC_EN	0x80000000
450d2ae2e20SPrabhakar Kushwaha /* Page read complete event enable */
451d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_EN_PGRDCMPL_EN	0x20000000
452d2ae2e20SPrabhakar Kushwaha /* Flash Timeout error enable */
453d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_EN_FTOER_EN	0x08000000
454d2ae2e20SPrabhakar Kushwaha /* Write Protect error enable */
455d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_EN_WPER_EN	0x04000000
456d2ae2e20SPrabhakar Kushwaha /* ECC error logging enable */
457d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_EN_ECCER_EN	0x02000000
458d2ae2e20SPrabhakar Kushwaha 
459d2ae2e20SPrabhakar Kushwaha /*
460d2ae2e20SPrabhakar Kushwaha  * NAND Event and Error Interrupt Enable Register (NAND_EVTER_INTR_EN)
461d2ae2e20SPrabhakar Kushwaha  */
462d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for operation complete */
463d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_INTR_OPCIR_EN		0x80000000
464d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for Page read complete */
465d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_INTR_PGRDCMPLIR_EN	0x20000000
466d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for Flash timeout error */
467d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_INTR_FTOERIR_EN		0x08000000
468d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for Write protect error */
469d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_INTR_WPERIR_EN		0x04000000
470d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for ECC error*/
471d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_EVTER_INTR_ECCERIR_EN		0x02000000
472d2ae2e20SPrabhakar Kushwaha 
473d2ae2e20SPrabhakar Kushwaha /*
474d2ae2e20SPrabhakar Kushwaha  * NAND Transfer Error Attribute Register-0 (NAND_ERATTR0)
475d2ae2e20SPrabhakar Kushwaha  */
476d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ERATTR0_MASK		0x0C080000
477d2ae2e20SPrabhakar Kushwaha /* Error on CS0-3 for NAND */
478d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ERATTR0_ERCS_CS0	0x00000000
479d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ERATTR0_ERCS_CS1	0x04000000
480d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ERATTR0_ERCS_CS2	0x08000000
481d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ERATTR0_ERCS_CS3	0x0C000000
482d2ae2e20SPrabhakar Kushwaha /* Transaction type of error Read/Write */
483d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ERATTR0_ERTTYPE_READ	0x00080000
484d2ae2e20SPrabhakar Kushwaha 
485d2ae2e20SPrabhakar Kushwaha /*
486d2ae2e20SPrabhakar Kushwaha  * NAND Flash Status Register (NAND_FSR)
487d2ae2e20SPrabhakar Kushwaha  */
488d2ae2e20SPrabhakar Kushwaha /* First byte of data read from read status op */
489d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NFSR_RS0		0xFF000000
490d2ae2e20SPrabhakar Kushwaha /* Second byte of data read from read status op */
491d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NFSR_RS1		0x00FF0000
492d2ae2e20SPrabhakar Kushwaha 
493d2ae2e20SPrabhakar Kushwaha /*
494d2ae2e20SPrabhakar Kushwaha  * ECC Error Status Registers (ECCSTAT0-ECCSTAT3)
495d2ae2e20SPrabhakar Kushwaha  */
496d2ae2e20SPrabhakar Kushwaha /* Number of ECC errors on sector n (n = 0-15) */
497d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR0_MASK	0x0F000000
498d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR0_SHIFT	24
499d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR1_MASK	0x000F0000
500d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR1_SHIFT	16
501d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR2_MASK	0x00000F00
502d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR2_SHIFT	8
503d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR3_MASK	0x0000000F
504d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT0_ERRCNT_SECTOR3_SHIFT	0
505d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR4_MASK	0x0F000000
506d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR4_SHIFT	24
507d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR5_MASK	0x000F0000
508d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR5_SHIFT	16
509d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR6_MASK	0x00000F00
510d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR6_SHIFT	8
511d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR7_MASK	0x0000000F
512d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT1_ERRCNT_SECTOR7_SHIFT	0
513d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR8_MASK	0x0F000000
514d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR8_SHIFT	24
515d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR9_MASK	0x000F0000
516d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR9_SHIFT	16
517d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR10_MASK	0x00000F00
518d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR10_SHIFT	8
519d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR11_MASK	0x0000000F
520d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT2_ERRCNT_SECTOR11_SHIFT	0
521d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR12_MASK	0x0F000000
522d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR12_SHIFT	24
523d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR13_MASK	0x000F0000
524d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR13_SHIFT	16
525d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR14_MASK	0x00000F00
526d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR14_SHIFT	8
527d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR15_MASK	0x0000000F
528d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_ECCSTAT3_ERRCNT_SECTOR15_SHIFT	0
529d2ae2e20SPrabhakar Kushwaha 
530d2ae2e20SPrabhakar Kushwaha /*
531d2ae2e20SPrabhakar Kushwaha  * NAND Control Register (NANDCR)
532d2ae2e20SPrabhakar Kushwaha  */
533d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCR_FTOCNT_MASK	0x1E000000
534d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCR_FTOCNT_SHIFT	25
535d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_NCR_FTOCNT(n)	((_ilog2(n) - 8)  << IFC_NAND_NCR_FTOCNT_SHIFT)
536d2ae2e20SPrabhakar Kushwaha 
537d2ae2e20SPrabhakar Kushwaha /*
538d2ae2e20SPrabhakar Kushwaha  * NAND_AUTOBOOT_TRGR
539d2ae2e20SPrabhakar Kushwaha  */
540d2ae2e20SPrabhakar Kushwaha /* Trigger RCW load */
541d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_AUTOBOOT_TRGR_RCW_LD	0x80000000
542d2ae2e20SPrabhakar Kushwaha /* Trigget Auto Boot */
543d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_AUTOBOOT_TRGR_BOOT_LD	0x20000000
544d2ae2e20SPrabhakar Kushwaha 
545d2ae2e20SPrabhakar Kushwaha /*
546d2ae2e20SPrabhakar Kushwaha  * NAND_MDR
547d2ae2e20SPrabhakar Kushwaha  */
548d2ae2e20SPrabhakar Kushwaha /* 1st read data byte when opcode SBRD */
549d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_MDR_RDATA0		0xFF000000
550d2ae2e20SPrabhakar Kushwaha /* 2nd read data byte when opcode SBRD */
551d2ae2e20SPrabhakar Kushwaha #define IFC_NAND_MDR_RDATA1		0x00FF0000
552d2ae2e20SPrabhakar Kushwaha 
553d2ae2e20SPrabhakar Kushwaha /*
554d2ae2e20SPrabhakar Kushwaha  * NOR Machine Specific Registers
555d2ae2e20SPrabhakar Kushwaha  */
556d2ae2e20SPrabhakar Kushwaha /*
557d2ae2e20SPrabhakar Kushwaha  * NOR Event and Error Status Register (NOR_EVTER_STAT)
558d2ae2e20SPrabhakar Kushwaha  */
559d2ae2e20SPrabhakar Kushwaha /* NOR Command Sequence Operation Complete */
560d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_STAT_OPC_NOR	0x80000000
561d2ae2e20SPrabhakar Kushwaha /* Write Protect Error */
562d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_STAT_WPER		0x04000000
563d2ae2e20SPrabhakar Kushwaha /* Command Sequence Timeout Error */
564d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_STAT_STOER	0x01000000
565d2ae2e20SPrabhakar Kushwaha 
566d2ae2e20SPrabhakar Kushwaha /*
567d2ae2e20SPrabhakar Kushwaha  * NOR Event and Error Enable Register (NOR_EVTER_EN)
568d2ae2e20SPrabhakar Kushwaha  */
569d2ae2e20SPrabhakar Kushwaha /* NOR Command Seq complete event enable */
570d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_EN_OPCEN_NOR	0x80000000
571d2ae2e20SPrabhakar Kushwaha /* Write Protect Error Checking Enable */
572d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_EN_WPEREN		0x04000000
573d2ae2e20SPrabhakar Kushwaha /* Timeout Error Enable */
574d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_EN_STOEREN	0x01000000
575d2ae2e20SPrabhakar Kushwaha 
576d2ae2e20SPrabhakar Kushwaha /*
577d2ae2e20SPrabhakar Kushwaha  * NOR Event and Error Interrupt Enable Register (NOR_EVTER_INTR_EN)
578d2ae2e20SPrabhakar Kushwaha  */
579d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for OPC complete */
580d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_INTR_OPCEN_NOR	0x80000000
581d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for write protect error */
582d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_INTR_WPEREN	0x04000000
583d2ae2e20SPrabhakar Kushwaha /* Enable interrupt for timeout error */
584d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_EVTER_INTR_STOEREN	0x01000000
585d2ae2e20SPrabhakar Kushwaha 
586d2ae2e20SPrabhakar Kushwaha /*
587d2ae2e20SPrabhakar Kushwaha  * NOR Transfer Error Attribute Register-0 (NOR_ERATTR0)
588d2ae2e20SPrabhakar Kushwaha  */
589d2ae2e20SPrabhakar Kushwaha /* Source ID for error transaction */
590d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR0_ERSRCID		0xFF000000
591d2ae2e20SPrabhakar Kushwaha /* AXI ID for error transation */
592d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR0_ERAID		0x000FF000
593d2ae2e20SPrabhakar Kushwaha /* Chip select corresponds to NOR error */
594d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR0_ERCS_CS0	0x00000000
595d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR0_ERCS_CS1	0x00000010
596d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR0_ERCS_CS2	0x00000020
597d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR0_ERCS_CS3	0x00000030
598d2ae2e20SPrabhakar Kushwaha /* Type of transaction read/write */
599d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR0_ERTYPE_READ	0x00000001
600d2ae2e20SPrabhakar Kushwaha 
601d2ae2e20SPrabhakar Kushwaha /*
602d2ae2e20SPrabhakar Kushwaha  * NOR Transfer Error Attribute Register-2 (NOR_ERATTR2)
603d2ae2e20SPrabhakar Kushwaha  */
604d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR2_ER_NUM_PHASE_EXP	0x000F0000
605d2ae2e20SPrabhakar Kushwaha #define IFC_NOR_ERATTR2_ER_NUM_PHASE_PER	0x00000F00
606d2ae2e20SPrabhakar Kushwaha 
607d2ae2e20SPrabhakar Kushwaha /*
608d2ae2e20SPrabhakar Kushwaha  * NOR Control Register (NORCR)
609d2ae2e20SPrabhakar Kushwaha  */
610d2ae2e20SPrabhakar Kushwaha #define IFC_NORCR_MASK			0x0F0F0000
611d2ae2e20SPrabhakar Kushwaha /* No. of Address/Data Phase */
612d2ae2e20SPrabhakar Kushwaha #define IFC_NORCR_NUM_PHASE_MASK	0x0F000000
613d2ae2e20SPrabhakar Kushwaha #define IFC_NORCR_NUM_PHASE_SHIFT	24
614d2ae2e20SPrabhakar Kushwaha #define IFC_NORCR_NUM_PHASE(n)	((n-1) << IFC_NORCR_NUM_PHASE_SHIFT)
615d2ae2e20SPrabhakar Kushwaha /* Sequence Timeout Count */
616d2ae2e20SPrabhakar Kushwaha #define IFC_NORCR_STOCNT_MASK		0x000F0000
617d2ae2e20SPrabhakar Kushwaha #define IFC_NORCR_STOCNT_SHIFT		16
618d2ae2e20SPrabhakar Kushwaha #define IFC_NORCR_STOCNT(n)	((__ilog2(n) - 8) << IFC_NORCR_STOCNT_SHIFT)
619d2ae2e20SPrabhakar Kushwaha 
620d2ae2e20SPrabhakar Kushwaha /*
621d2ae2e20SPrabhakar Kushwaha  * GPCM Machine specific registers
622d2ae2e20SPrabhakar Kushwaha  */
623d2ae2e20SPrabhakar Kushwaha /*
624d2ae2e20SPrabhakar Kushwaha  * GPCM Event and Error Status Register (GPCM_EVTER_STAT)
625d2ae2e20SPrabhakar Kushwaha  */
626d2ae2e20SPrabhakar Kushwaha /* Timeout error */
627d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_EVTER_STAT_TOER	0x04000000
628d2ae2e20SPrabhakar Kushwaha /* Parity error */
629d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_EVTER_STAT_PER		0x01000000
630d2ae2e20SPrabhakar Kushwaha 
631d2ae2e20SPrabhakar Kushwaha /*
632d2ae2e20SPrabhakar Kushwaha  * GPCM Event and Error Enable Register (GPCM_EVTER_EN)
633d2ae2e20SPrabhakar Kushwaha  */
634d2ae2e20SPrabhakar Kushwaha /* Timeout error enable */
635d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_EVTER_EN_TOER_EN	0x04000000
636d2ae2e20SPrabhakar Kushwaha /* Parity error enable */
637d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_EVTER_EN_PER_EN	0x01000000
638d2ae2e20SPrabhakar Kushwaha 
639d2ae2e20SPrabhakar Kushwaha /*
640d2ae2e20SPrabhakar Kushwaha  * GPCM Event and Error Interrupt Enable Register (GPCM_EVTER_INTR_EN)
641d2ae2e20SPrabhakar Kushwaha  */
642d2ae2e20SPrabhakar Kushwaha /* Enable Interrupt for timeout error */
643d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_EEIER_TOERIR_EN	0x04000000
644d2ae2e20SPrabhakar Kushwaha /* Enable Interrupt for Parity error */
645d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_EEIER_PERIR_EN		0x01000000
646d2ae2e20SPrabhakar Kushwaha 
647d2ae2e20SPrabhakar Kushwaha /*
648d2ae2e20SPrabhakar Kushwaha  * GPCM Transfer Error Attribute Register-0 (GPCM_ERATTR0)
649d2ae2e20SPrabhakar Kushwaha  */
650d2ae2e20SPrabhakar Kushwaha /* Source ID for error transaction */
651d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR0_ERSRCID	0xFF000000
652d2ae2e20SPrabhakar Kushwaha /* AXI ID for error transaction */
653d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR0_ERAID		0x000FF000
654d2ae2e20SPrabhakar Kushwaha /* Chip select corresponds to GPCM error */
655d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR0_ERCS_CS0	0x00000000
656d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR0_ERCS_CS1	0x00000040
657d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR0_ERCS_CS2	0x00000080
658d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR0_ERCS_CS3	0x000000C0
659d2ae2e20SPrabhakar Kushwaha /* Type of transaction read/Write */
660d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR0_ERTYPE_READ	0x00000001
661d2ae2e20SPrabhakar Kushwaha 
662d2ae2e20SPrabhakar Kushwaha /*
663d2ae2e20SPrabhakar Kushwaha  * GPCM Transfer Error Attribute Register-2 (GPCM_ERATTR2)
664d2ae2e20SPrabhakar Kushwaha  */
665d2ae2e20SPrabhakar Kushwaha /* On which beat of address/data parity error is observed */
666d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR2_PERR_BEAT		0x00000C00
667d2ae2e20SPrabhakar Kushwaha /* Parity Error on byte */
668d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR2_PERR_BYTE		0x000000F0
669d2ae2e20SPrabhakar Kushwaha /* Parity Error reported in addr or data phase */
670d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_ERATTR2_PERR_DATA_PHASE	0x00000001
671d2ae2e20SPrabhakar Kushwaha 
672d2ae2e20SPrabhakar Kushwaha /*
673d2ae2e20SPrabhakar Kushwaha  * GPCM Status Register (GPCM_STAT)
674d2ae2e20SPrabhakar Kushwaha  */
675d2ae2e20SPrabhakar Kushwaha #define IFC_GPCM_STAT_BSY		0x80000000  /* GPCM is busy */
676d2ae2e20SPrabhakar Kushwaha 
677d2ae2e20SPrabhakar Kushwaha /*
678d2ae2e20SPrabhakar Kushwaha  * IFC Controller NAND Machine registers
679d2ae2e20SPrabhakar Kushwaha  */
680d2ae2e20SPrabhakar Kushwaha struct fsl_ifc_nand {
681d2ae2e20SPrabhakar Kushwaha 	__be32 ncfgr;
682d2ae2e20SPrabhakar Kushwaha 	u32 res1[0x4];
683d2ae2e20SPrabhakar Kushwaha 	__be32 nand_fcr0;
684d2ae2e20SPrabhakar Kushwaha 	__be32 nand_fcr1;
685d2ae2e20SPrabhakar Kushwaha 	u32 res2[0x8];
686d2ae2e20SPrabhakar Kushwaha 	__be32 row0;
687d2ae2e20SPrabhakar Kushwaha 	u32 res3;
688d2ae2e20SPrabhakar Kushwaha 	__be32 col0;
689d2ae2e20SPrabhakar Kushwaha 	u32 res4;
690d2ae2e20SPrabhakar Kushwaha 	__be32 row1;
691d2ae2e20SPrabhakar Kushwaha 	u32 res5;
692d2ae2e20SPrabhakar Kushwaha 	__be32 col1;
693d2ae2e20SPrabhakar Kushwaha 	u32 res6;
694d2ae2e20SPrabhakar Kushwaha 	__be32 row2;
695d2ae2e20SPrabhakar Kushwaha 	u32 res7;
696d2ae2e20SPrabhakar Kushwaha 	__be32 col2;
697d2ae2e20SPrabhakar Kushwaha 	u32 res8;
698d2ae2e20SPrabhakar Kushwaha 	__be32 row3;
699d2ae2e20SPrabhakar Kushwaha 	u32 res9;
700d2ae2e20SPrabhakar Kushwaha 	__be32 col3;
701d2ae2e20SPrabhakar Kushwaha 	u32 res10[0x24];
702d2ae2e20SPrabhakar Kushwaha 	__be32 nand_fbcr;
703d2ae2e20SPrabhakar Kushwaha 	u32 res11;
704d2ae2e20SPrabhakar Kushwaha 	__be32 nand_fir0;
705d2ae2e20SPrabhakar Kushwaha 	__be32 nand_fir1;
706d2ae2e20SPrabhakar Kushwaha 	__be32 nand_fir2;
707d2ae2e20SPrabhakar Kushwaha 	u32 res12[0x10];
708d2ae2e20SPrabhakar Kushwaha 	__be32 nand_csel;
709d2ae2e20SPrabhakar Kushwaha 	u32 res13;
710d2ae2e20SPrabhakar Kushwaha 	__be32 nandseq_strt;
711d2ae2e20SPrabhakar Kushwaha 	u32 res14;
712d2ae2e20SPrabhakar Kushwaha 	__be32 nand_evter_stat;
713d2ae2e20SPrabhakar Kushwaha 	u32 res15;
714d2ae2e20SPrabhakar Kushwaha 	__be32 pgrdcmpl_evt_stat;
715d2ae2e20SPrabhakar Kushwaha 	u32 res16[0x2];
716d2ae2e20SPrabhakar Kushwaha 	__be32 nand_evter_en;
717d2ae2e20SPrabhakar Kushwaha 	u32 res17[0x2];
718d2ae2e20SPrabhakar Kushwaha 	__be32 nand_evter_intr_en;
7197a654172SRaghav Dogra 	__be32 nand_vol_addr_stat;
7207a654172SRaghav Dogra 	u32 res18;
721d2ae2e20SPrabhakar Kushwaha 	__be32 nand_erattr0;
722d2ae2e20SPrabhakar Kushwaha 	__be32 nand_erattr1;
723d2ae2e20SPrabhakar Kushwaha 	u32 res19[0x10];
724d2ae2e20SPrabhakar Kushwaha 	__be32 nand_fsr;
72565644147SMark Marshall 	u32 res20;
7266b00c351SJagdish Gediya 	__be32 nand_eccstat[8];
7277a654172SRaghav Dogra 	u32 res21[0x1c];
728d2ae2e20SPrabhakar Kushwaha 	__be32 nanndcr;
729d2ae2e20SPrabhakar Kushwaha 	u32 res22[0x2];
730d2ae2e20SPrabhakar Kushwaha 	__be32 nand_autoboot_trgr;
731d2ae2e20SPrabhakar Kushwaha 	u32 res23;
732d2ae2e20SPrabhakar Kushwaha 	__be32 nand_mdr;
7337a654172SRaghav Dogra 	u32 res24[0x1C];
7347a654172SRaghav Dogra 	__be32 nand_dll_lowcfg0;
7357a654172SRaghav Dogra 	__be32 nand_dll_lowcfg1;
7367a654172SRaghav Dogra 	u32 res25;
7377a654172SRaghav Dogra 	__be32 nand_dll_lowstat;
7387a654172SRaghav Dogra 	u32 res26[0x3c];
739d2ae2e20SPrabhakar Kushwaha };
740d2ae2e20SPrabhakar Kushwaha 
741d2ae2e20SPrabhakar Kushwaha /*
742d2ae2e20SPrabhakar Kushwaha  * IFC controller NOR Machine registers
743d2ae2e20SPrabhakar Kushwaha  */
744d2ae2e20SPrabhakar Kushwaha struct fsl_ifc_nor {
745d2ae2e20SPrabhakar Kushwaha 	__be32 nor_evter_stat;
746d2ae2e20SPrabhakar Kushwaha 	u32 res1[0x2];
747d2ae2e20SPrabhakar Kushwaha 	__be32 nor_evter_en;
748d2ae2e20SPrabhakar Kushwaha 	u32 res2[0x2];
749d2ae2e20SPrabhakar Kushwaha 	__be32 nor_evter_intr_en;
750d2ae2e20SPrabhakar Kushwaha 	u32 res3[0x2];
751d2ae2e20SPrabhakar Kushwaha 	__be32 nor_erattr0;
752d2ae2e20SPrabhakar Kushwaha 	__be32 nor_erattr1;
753d2ae2e20SPrabhakar Kushwaha 	__be32 nor_erattr2;
754d2ae2e20SPrabhakar Kushwaha 	u32 res4[0x4];
755d2ae2e20SPrabhakar Kushwaha 	__be32 norcr;
756d2ae2e20SPrabhakar Kushwaha 	u32 res5[0xEF];
757d2ae2e20SPrabhakar Kushwaha };
758d2ae2e20SPrabhakar Kushwaha 
759d2ae2e20SPrabhakar Kushwaha /*
760d2ae2e20SPrabhakar Kushwaha  * IFC controller GPCM Machine registers
761d2ae2e20SPrabhakar Kushwaha  */
762d2ae2e20SPrabhakar Kushwaha struct fsl_ifc_gpcm {
763d2ae2e20SPrabhakar Kushwaha 	__be32 gpcm_evter_stat;
764d2ae2e20SPrabhakar Kushwaha 	u32 res1[0x2];
765d2ae2e20SPrabhakar Kushwaha 	__be32 gpcm_evter_en;
766d2ae2e20SPrabhakar Kushwaha 	u32 res2[0x2];
767d2ae2e20SPrabhakar Kushwaha 	__be32 gpcm_evter_intr_en;
768d2ae2e20SPrabhakar Kushwaha 	u32 res3[0x2];
769d2ae2e20SPrabhakar Kushwaha 	__be32 gpcm_erattr0;
770d2ae2e20SPrabhakar Kushwaha 	__be32 gpcm_erattr1;
771d2ae2e20SPrabhakar Kushwaha 	__be32 gpcm_erattr2;
772d2ae2e20SPrabhakar Kushwaha 	__be32 gpcm_stat;
773d2ae2e20SPrabhakar Kushwaha };
774d2ae2e20SPrabhakar Kushwaha 
775d2ae2e20SPrabhakar Kushwaha /*
776d2ae2e20SPrabhakar Kushwaha  * IFC Controller Registers
777d2ae2e20SPrabhakar Kushwaha  */
7787a654172SRaghav Dogra struct fsl_ifc_global {
779d2ae2e20SPrabhakar Kushwaha 	__be32 ifc_rev;
780d2ae2e20SPrabhakar Kushwaha 	u32 res1[0x2];
781d2ae2e20SPrabhakar Kushwaha 	struct {
782d2ae2e20SPrabhakar Kushwaha 		__be32 cspr_ext;
783d2ae2e20SPrabhakar Kushwaha 		__be32 cspr;
784d2ae2e20SPrabhakar Kushwaha 		u32 res2;
785d2ae2e20SPrabhakar Kushwaha 	} cspr_cs[FSL_IFC_BANK_COUNT];
78609691661SAaron Sierra 	u32 res3[0xd];
787d2ae2e20SPrabhakar Kushwaha 	struct {
788d2ae2e20SPrabhakar Kushwaha 		__be32 amask;
789d2ae2e20SPrabhakar Kushwaha 		u32 res4[0x2];
790d2ae2e20SPrabhakar Kushwaha 	} amask_cs[FSL_IFC_BANK_COUNT];
79109691661SAaron Sierra 	u32 res5[0xc];
792d2ae2e20SPrabhakar Kushwaha 	struct {
793d2ae2e20SPrabhakar Kushwaha 		__be32 csor;
79426ae4980SAaron Sierra 		__be32 csor_ext;
795d2ae2e20SPrabhakar Kushwaha 		u32 res6;
796d2ae2e20SPrabhakar Kushwaha 	} csor_cs[FSL_IFC_BANK_COUNT];
79709691661SAaron Sierra 	u32 res7[0xc];
798d2ae2e20SPrabhakar Kushwaha 	struct {
799d2ae2e20SPrabhakar Kushwaha 		__be32 ftim[4];
800d2ae2e20SPrabhakar Kushwaha 		u32 res8[0x8];
801d2ae2e20SPrabhakar Kushwaha 	} ftim_cs[FSL_IFC_BANK_COUNT];
80209691661SAaron Sierra 	u32 res9[0x30];
803d2ae2e20SPrabhakar Kushwaha 	__be32 rb_stat;
8047a654172SRaghav Dogra 	__be32 rb_map;
8057a654172SRaghav Dogra 	__be32 wb_map;
806d2ae2e20SPrabhakar Kushwaha 	__be32 ifc_gcr;
8077a654172SRaghav Dogra 	u32 res10[0x2];
808d2ae2e20SPrabhakar Kushwaha 	__be32 cm_evter_stat;
8097a654172SRaghav Dogra 	u32 res11[0x2];
810d2ae2e20SPrabhakar Kushwaha 	__be32 cm_evter_en;
8117a654172SRaghav Dogra 	u32 res12[0x2];
812d2ae2e20SPrabhakar Kushwaha 	__be32 cm_evter_intr_en;
8137a654172SRaghav Dogra 	u32 res13[0x2];
814d2ae2e20SPrabhakar Kushwaha 	__be32 cm_erattr0;
815d2ae2e20SPrabhakar Kushwaha 	__be32 cm_erattr1;
8167a654172SRaghav Dogra 	u32 res14[0x2];
817d2ae2e20SPrabhakar Kushwaha 	__be32 ifc_ccr;
818d2ae2e20SPrabhakar Kushwaha 	__be32 ifc_csr;
8197a654172SRaghav Dogra 	__be32 ddr_ccr_low;
8207a654172SRaghav Dogra };
8217a654172SRaghav Dogra 
8227a654172SRaghav Dogra 
8237a654172SRaghav Dogra struct fsl_ifc_runtime {
824d2ae2e20SPrabhakar Kushwaha 	struct fsl_ifc_nand ifc_nand;
825d2ae2e20SPrabhakar Kushwaha 	struct fsl_ifc_nor ifc_nor;
826d2ae2e20SPrabhakar Kushwaha 	struct fsl_ifc_gpcm ifc_gpcm;
827d2ae2e20SPrabhakar Kushwaha };
828d2ae2e20SPrabhakar Kushwaha 
829d2ae2e20SPrabhakar Kushwaha extern unsigned int convert_ifc_address(phys_addr_t addr_base);
830d2ae2e20SPrabhakar Kushwaha extern int fsl_ifc_find(phys_addr_t addr_base);
831d2ae2e20SPrabhakar Kushwaha 
832d2ae2e20SPrabhakar Kushwaha /* overview of the fsl ifc controller */
833d2ae2e20SPrabhakar Kushwaha 
834d2ae2e20SPrabhakar Kushwaha struct fsl_ifc_ctrl {
835d2ae2e20SPrabhakar Kushwaha 	/* device info */
836d2ae2e20SPrabhakar Kushwaha 	struct device			*dev;
8377a654172SRaghav Dogra 	struct fsl_ifc_global __iomem	*gregs;
8387a654172SRaghav Dogra 	struct fsl_ifc_runtime __iomem	*rregs;
839d2ae2e20SPrabhakar Kushwaha 	int				irq;
840d2ae2e20SPrabhakar Kushwaha 	int				nand_irq;
841d2ae2e20SPrabhakar Kushwaha 	spinlock_t			lock;
842d2ae2e20SPrabhakar Kushwaha 	void				*nand;
84309691661SAaron Sierra 	int				version;
84409691661SAaron Sierra 	int				banks;
845d2ae2e20SPrabhakar Kushwaha 
846d2ae2e20SPrabhakar Kushwaha 	u32 nand_stat;
847d2ae2e20SPrabhakar Kushwaha 	wait_queue_head_t nand_wait;
848cf184dc2SJaiprakash Singh 	bool little_endian;
849d2ae2e20SPrabhakar Kushwaha };
850d2ae2e20SPrabhakar Kushwaha 
851d2ae2e20SPrabhakar Kushwaha extern struct fsl_ifc_ctrl *fsl_ifc_ctrl_dev;
852d2ae2e20SPrabhakar Kushwaha 
ifc_in32(void __iomem * addr)853cf184dc2SJaiprakash Singh static inline u32 ifc_in32(void __iomem *addr)
854cf184dc2SJaiprakash Singh {
855cf184dc2SJaiprakash Singh 	u32 val;
856cf184dc2SJaiprakash Singh 
857cf184dc2SJaiprakash Singh 	if (fsl_ifc_ctrl_dev->little_endian)
858cf184dc2SJaiprakash Singh 		val = ioread32(addr);
859cf184dc2SJaiprakash Singh 	else
860cf184dc2SJaiprakash Singh 		val = ioread32be(addr);
861cf184dc2SJaiprakash Singh 
862cf184dc2SJaiprakash Singh 	return val;
863cf184dc2SJaiprakash Singh }
864cf184dc2SJaiprakash Singh 
ifc_in16(void __iomem * addr)865cf184dc2SJaiprakash Singh static inline u16 ifc_in16(void __iomem *addr)
866cf184dc2SJaiprakash Singh {
867cf184dc2SJaiprakash Singh 	u16 val;
868cf184dc2SJaiprakash Singh 
869cf184dc2SJaiprakash Singh 	if (fsl_ifc_ctrl_dev->little_endian)
870cf184dc2SJaiprakash Singh 		val = ioread16(addr);
871cf184dc2SJaiprakash Singh 	else
872cf184dc2SJaiprakash Singh 		val = ioread16be(addr);
873cf184dc2SJaiprakash Singh 
874cf184dc2SJaiprakash Singh 	return val;
875cf184dc2SJaiprakash Singh }
876cf184dc2SJaiprakash Singh 
ifc_in8(void __iomem * addr)877cf184dc2SJaiprakash Singh static inline u8 ifc_in8(void __iomem *addr)
878cf184dc2SJaiprakash Singh {
879cf184dc2SJaiprakash Singh 	return ioread8(addr);
880cf184dc2SJaiprakash Singh }
881cf184dc2SJaiprakash Singh 
ifc_out32(u32 val,void __iomem * addr)882cf184dc2SJaiprakash Singh static inline void ifc_out32(u32 val, void __iomem *addr)
883cf184dc2SJaiprakash Singh {
884cf184dc2SJaiprakash Singh 	if (fsl_ifc_ctrl_dev->little_endian)
885cf184dc2SJaiprakash Singh 		iowrite32(val, addr);
886cf184dc2SJaiprakash Singh 	else
887cf184dc2SJaiprakash Singh 		iowrite32be(val, addr);
888cf184dc2SJaiprakash Singh }
889cf184dc2SJaiprakash Singh 
ifc_out16(u16 val,void __iomem * addr)890cf184dc2SJaiprakash Singh static inline void ifc_out16(u16 val, void __iomem *addr)
891cf184dc2SJaiprakash Singh {
892cf184dc2SJaiprakash Singh 	if (fsl_ifc_ctrl_dev->little_endian)
893cf184dc2SJaiprakash Singh 		iowrite16(val, addr);
894cf184dc2SJaiprakash Singh 	else
895cf184dc2SJaiprakash Singh 		iowrite16be(val, addr);
896cf184dc2SJaiprakash Singh }
897cf184dc2SJaiprakash Singh 
ifc_out8(u8 val,void __iomem * addr)898cf184dc2SJaiprakash Singh static inline void ifc_out8(u8 val, void __iomem *addr)
899cf184dc2SJaiprakash Singh {
900cf184dc2SJaiprakash Singh 	iowrite8(val, addr);
901cf184dc2SJaiprakash Singh }
902d2ae2e20SPrabhakar Kushwaha 
903d2ae2e20SPrabhakar Kushwaha #endif /* __ASM_FSL_IFC_H */
904