xref: /rk3399_ARM-atf/drivers/nxp/ifc/nand/ifc.h (revision b57d9d6f29d8dcb8d6b5792ea5a2ed313f2d4292)
1*28279cf2SJiafei Pan /*
2*28279cf2SJiafei Pan  * Copyright 2022 NXP
3*28279cf2SJiafei Pan  *
4*28279cf2SJiafei Pan  * SPDX-License-Identifier: BSD-3-Clause
5*28279cf2SJiafei Pan  */
6*28279cf2SJiafei Pan 
7*28279cf2SJiafei Pan #ifndef IFC_H
8*28279cf2SJiafei Pan #define IFC_H
9*28279cf2SJiafei Pan 
10*28279cf2SJiafei Pan #include <endian.h>
11*28279cf2SJiafei Pan 
12*28279cf2SJiafei Pan #include <mmio.h>
13*28279cf2SJiafei Pan 
14*28279cf2SJiafei Pan #define NXP_IFC_RUN_TIME_ADDR	U(0x1000)
15*28279cf2SJiafei Pan 
16*28279cf2SJiafei Pan /* CPSR - Chip Select Property Register Offset */
17*28279cf2SJiafei Pan #define EXT_CSPR(n)		(U(0x000C) + (n * 0xC))
18*28279cf2SJiafei Pan #define CSPR(n)			(U(0x0010) + (n * 0xC))
19*28279cf2SJiafei Pan #define CSOR(n)			(U(0x0130) + (n * 0xC))
20*28279cf2SJiafei Pan #define EXT_CSOR(n)		(U(0x0134) + (n * 0xC))
21*28279cf2SJiafei Pan #define IFC_AMASK_CS0		U(0x00A0)
22*28279cf2SJiafei Pan 
23*28279cf2SJiafei Pan /* NAND specific Registers Offset */
24*28279cf2SJiafei Pan #define NCFGR			(NXP_IFC_RUN_TIME_ADDR + U(0x0000))
25*28279cf2SJiafei Pan #define NAND_FCR0		(NXP_IFC_RUN_TIME_ADDR + U(0x0014))
26*28279cf2SJiafei Pan 
27*28279cf2SJiafei Pan #define ROW0			(NXP_IFC_RUN_TIME_ADDR + U(0x003C))
28*28279cf2SJiafei Pan #define ROW1			(NXP_IFC_RUN_TIME_ADDR + U(0x004C))
29*28279cf2SJiafei Pan #define COL0			(NXP_IFC_RUN_TIME_ADDR + U(0x0044))
30*28279cf2SJiafei Pan #define COL1			(NXP_IFC_RUN_TIME_ADDR + U(0x0054))
31*28279cf2SJiafei Pan 
32*28279cf2SJiafei Pan #define NAND_BC			(NXP_IFC_RUN_TIME_ADDR + U(0x0108))
33*28279cf2SJiafei Pan #define NAND_FIR0		(NXP_IFC_RUN_TIME_ADDR + U(0x0110))
34*28279cf2SJiafei Pan #define NAND_FIR1		(NXP_IFC_RUN_TIME_ADDR + U(0x0114))
35*28279cf2SJiafei Pan #define NAND_FIR2		(NXP_IFC_RUN_TIME_ADDR + U(0x0118))
36*28279cf2SJiafei Pan #define NAND_CSEL		(NXP_IFC_RUN_TIME_ADDR + U(0x015C))
37*28279cf2SJiafei Pan #define NANDSEQ_STRT		(NXP_IFC_RUN_TIME_ADDR + U(0x0164))
38*28279cf2SJiafei Pan #define NAND_EVTER_STAT		(NXP_IFC_RUN_TIME_ADDR + U(0x016C))
39*28279cf2SJiafei Pan #define NAND_AUTOBOOT_TRGR	(NXP_IFC_RUN_TIME_ADDR + U(0x0284))
40*28279cf2SJiafei Pan 
41*28279cf2SJiafei Pan /* Size of SRAM Buffer */
42*28279cf2SJiafei Pan #define CSPR_PS			U(0x00000180)
43*28279cf2SJiafei Pan #define CSPR_PS_SHIFT		7
44*28279cf2SJiafei Pan #define CSPR_PS_8		0x1 // Port Size 8 bit
45*28279cf2SJiafei Pan #define CSPR_PS_16		0x2 // Port Size 16 bit
46*28279cf2SJiafei Pan #define CSPR_PS_32		0x3 // Port Size 32 bit
47*28279cf2SJiafei Pan 
48*28279cf2SJiafei Pan /* Chip Select Option Register NAND Machine */
49*28279cf2SJiafei Pan #define CSOR_NAND_PGS		U(0x00380000)
50*28279cf2SJiafei Pan #define CSOR_NAND_PGS_SHIFT	19
51*28279cf2SJiafei Pan #define CSOR_NAND_PGS_512	U(0x00000000)
52*28279cf2SJiafei Pan #define CSOR_NAND_PGS_2K	U(0x00080000)
53*28279cf2SJiafei Pan #define CSOR_NAND_PGS_4K	U(0x00100000)
54*28279cf2SJiafei Pan #define CSOR_NAND_PGS_8K	U(0x00180000)
55*28279cf2SJiafei Pan #define CSOR_NAND_PGS_16K	U(0x00200000)
56*28279cf2SJiafei Pan 
57*28279cf2SJiafei Pan 
58*28279cf2SJiafei Pan #define CSOR_NAND_PB			U(0x00000700)
59*28279cf2SJiafei Pan #define CSOR_NAND_PB_32			U(0x00000000)
60*28279cf2SJiafei Pan #define CSOR_NAND_PB_64			U(0x00000100)
61*28279cf2SJiafei Pan #define CSOR_NAND_PB_128		U(0x00000200)
62*28279cf2SJiafei Pan #define CSOR_NAND_PB_256		U(0x00000300)
63*28279cf2SJiafei Pan #define CSOR_NAND_PB_512		U(0x00000400)
64*28279cf2SJiafei Pan #define CSOR_NAND_PB_1024		U(0x00000500)
65*28279cf2SJiafei Pan #define CSOR_NAND_PB_2048		U(0x00000600)
66*28279cf2SJiafei Pan #define CSOR_NAND_PPB_32		32
67*28279cf2SJiafei Pan #define CSOR_NAND_PPB_64		64
68*28279cf2SJiafei Pan #define CSOR_NAND_PPB_128		128
69*28279cf2SJiafei Pan #define CSOR_NAND_PPB_256		256
70*28279cf2SJiafei Pan #define CSOR_NAND_PPB_512		512
71*28279cf2SJiafei Pan #define CSOR_NAND_PPB_1024		1024
72*28279cf2SJiafei Pan #define CSOR_NAND_PPB_2048		2048
73*28279cf2SJiafei Pan 
74*28279cf2SJiafei Pan /* NAND Chip select register */
75*28279cf2SJiafei Pan #define NAND_CSEL_SHIFT			26
76*28279cf2SJiafei Pan #define NAND_COL_MS_SHIFT		31
77*28279cf2SJiafei Pan 
78*28279cf2SJiafei Pan /* FCR - Flash Command Register */
79*28279cf2SJiafei Pan #define FCR_CMD0			U(0xFF000000)
80*28279cf2SJiafei Pan #define FCR_CMD0_SHIFT			24
81*28279cf2SJiafei Pan #define FCR_CMD1			U(0x00FF0000)
82*28279cf2SJiafei Pan #define FCR_CMD1_SHIFT			16
83*28279cf2SJiafei Pan #define FCR_CMD2			U(0x0000FF00)
84*28279cf2SJiafei Pan #define FCR_CMD2_SHIFT			8
85*28279cf2SJiafei Pan #define FCR_CMD3			U(0x000000FF)
86*28279cf2SJiafei Pan #define FCR_CMD3_SHIFT			0
87*28279cf2SJiafei Pan 
88*28279cf2SJiafei Pan /* FIR - Flash Instruction Register Opcode */
89*28279cf2SJiafei Pan #define FIR_OP0				U(0xFC000000)
90*28279cf2SJiafei Pan #define FIR_OP0_SHIFT			26
91*28279cf2SJiafei Pan #define FIR_OP1				U(0x03F00000)
92*28279cf2SJiafei Pan #define FIR_OP1_SHIFT			20
93*28279cf2SJiafei Pan #define FIR_OP2				U(0x000FC000)
94*28279cf2SJiafei Pan #define FIR_OP2_SHIFT			14
95*28279cf2SJiafei Pan #define FIR_OP3				U(0x00003F00)
96*28279cf2SJiafei Pan #define FIR_OP3_SHIFT			8
97*28279cf2SJiafei Pan #define FIR_OP4				U(0x000000FC)
98*28279cf2SJiafei Pan #define FIR_OP4_SHIFT			2
99*28279cf2SJiafei Pan #define FIR_OP5				U(0xFC000000)
100*28279cf2SJiafei Pan #define FIR_OP5_SHIFT			26
101*28279cf2SJiafei Pan #define FIR_OP6				U(0x03F00000)
102*28279cf2SJiafei Pan #define FIR_OP6_SHIFT			20
103*28279cf2SJiafei Pan 
104*28279cf2SJiafei Pan /* Instruction Opcode - 6 bits */
105*28279cf2SJiafei Pan #define FIR_OP_NOP			0x00
106*28279cf2SJiafei Pan #define FIR_OP_CA0			0x01 /* Issue current column address */
107*28279cf2SJiafei Pan #define FIR_OP_CA1			0x02 /* Issue current column address */
108*28279cf2SJiafei Pan #define FIR_OP_RA0			0x05 /* Issue current column address */
109*28279cf2SJiafei Pan #define FIR_OP_RA1			0x06 /* Issue current column address */
110*28279cf2SJiafei Pan #define FIR_OP_CMD0			0x09 /* Issue command from FCR[CMD0] */
111*28279cf2SJiafei Pan #define FIR_OP_CMD1			0x0a /* Issue command from FCR[CMD1] */
112*28279cf2SJiafei Pan #define FIR_OP_CMD2			0x0b /* Issue command from FCR[CMD2] */
113*28279cf2SJiafei Pan #define FIR_OP_CMD3			0x0c /* Issue command from FCR[CMD3] */
114*28279cf2SJiafei Pan #define FIR_OP_CW0			0x11 /* Wait then issue FCR[CMD0] */
115*28279cf2SJiafei Pan #define FIR_OP_CW1			0x12 /* Wait then issue FCR[CMD1] */
116*28279cf2SJiafei Pan #define FIR_OP_CW2			0x13 /* Wait then issue FCR[CMD1] */
117*28279cf2SJiafei Pan #define FIR_OP_CW3			0x14 /* Wait then issue FCR[CMD1] */
118*28279cf2SJiafei Pan #define FIR_OP_WBCD			0x19 /* Wait then read FBCR bytes */
119*28279cf2SJiafei Pan #define FIR_OP_RBCD			0x1a /* Wait then read 1 or 2 bytes */
120*28279cf2SJiafei Pan #define FIR_OP_BTRD			0x1b /* Wait then read 1 or 2 bytes */
121*28279cf2SJiafei Pan #define FIR_OP_RDSTAT			0x1c /* Wait then read 1 or 2 bytes */
122*28279cf2SJiafei Pan #define FIR_OP_NWAIT			0x1d /* Wait then read 1 or 2 bytes */
123*28279cf2SJiafei Pan #define FIR_OP_WFR			0x1e /* Wait then read 1 or 2 bytes */
124*28279cf2SJiafei Pan 
125*28279cf2SJiafei Pan #define NAND_SEQ_STRT_FIR_STRT		U(0x80000000)
126*28279cf2SJiafei Pan #define NAND_SEQ_STRT_FIR_STRT_SHIFT	31
127*28279cf2SJiafei Pan 
128*28279cf2SJiafei Pan #define NAND_EVTER_STAT_FTOER		U(0x08000000)
129*28279cf2SJiafei Pan #define NAND_EVTER_STAT_WPER		U(0x04000000)
130*28279cf2SJiafei Pan #define NAND_EVTER_STAT_ECCER		U(0x02000000)
131*28279cf2SJiafei Pan #define NAND_EVTER_STAT_DQSER		U(0x01000000)
132*28279cf2SJiafei Pan #define NAND_EVTER_STAT_RCW_DN		U(0x00008000)
133*28279cf2SJiafei Pan #define NAND_EVTER_STAT_BOOT_DN		U(0x00004000)
134*28279cf2SJiafei Pan #define NAND_EVTER_STAT_RCW_DN		U(0x00008000)
135*28279cf2SJiafei Pan #define NAND_EVTER_STAT_OPC_DN		U(0x80000000)
136*28279cf2SJiafei Pan #define NAND_EVTER_STAT_BBI_SRCH_SEL	U(0x00000800)
137*28279cf2SJiafei Pan #define NCFGR_BOOT			U(0x80000000)
138*28279cf2SJiafei Pan #define NAND_AUTOBOOT_TRGR_RCW_LD	U(0x80000000)
139*28279cf2SJiafei Pan #define NAND_AUTOBOOT_TRGR_BOOT_LD	U(0x20000000)
140*28279cf2SJiafei Pan 
141*28279cf2SJiafei Pan /* ECC ERROR STATUS Registers */
142*28279cf2SJiafei Pan #define NAND_RCW_LD			U(0x80000000)
143*28279cf2SJiafei Pan #define NAND_BOOT_LD			U(0x20000000)
144*28279cf2SJiafei Pan 
145*28279cf2SJiafei Pan /*Other Temp Defines */
146*28279cf2SJiafei Pan /*256 bad Blocks supported */
147*28279cf2SJiafei Pan #define BBT_SIZE			256
148*28279cf2SJiafei Pan 
149*28279cf2SJiafei Pan /*Standard NAND flash commands */
150*28279cf2SJiafei Pan #define NAND_CMD_READ0			0
151*28279cf2SJiafei Pan #define NAND_CMD_READ1			1
152*28279cf2SJiafei Pan #define NAND_CMD_READOOB		0x50
153*28279cf2SJiafei Pan 
154*28279cf2SJiafei Pan /*Extended commands for large page devices */
155*28279cf2SJiafei Pan #define NAND_CMD_READSTART		0x30
156*28279cf2SJiafei Pan 
157*28279cf2SJiafei Pan #define NAND_TIMEOUT_MS			40
158*28279cf2SJiafei Pan 
159*28279cf2SJiafei Pan #define EMPTY_VAL_CHECK			U(0xFFFFFFFF)
160*28279cf2SJiafei Pan #define EMPTY_VAL			0xFF
161*28279cf2SJiafei Pan 
162*28279cf2SJiafei Pan 
163*28279cf2SJiafei Pan #define MAIN				0
164*28279cf2SJiafei Pan #define SPARE				1
165*28279cf2SJiafei Pan 
166*28279cf2SJiafei Pan #define GOOD_BLK			1
167*28279cf2SJiafei Pan #define BAD_BLK				0
168*28279cf2SJiafei Pan #define DIV_2				2
169*28279cf2SJiafei Pan 
170*28279cf2SJiafei Pan #define ATTRIBUTE_PGSZ			0xa
171*28279cf2SJiafei Pan #define ATTRIBUTE_PPB			0xb
172*28279cf2SJiafei Pan 
173*28279cf2SJiafei Pan #define CSPR_PORT_SIZE_8		(0x1 << 7)
174*28279cf2SJiafei Pan #define CSPR_PORT_SIZE_16		(0x2 << 7)
175*28279cf2SJiafei Pan #define CSPR_PORT_SIZE_32		(0x3 << 7)
176*28279cf2SJiafei Pan 
177*28279cf2SJiafei Pan /* NAND specific */
178*28279cf2SJiafei Pan #define RCW_SRC_NAND_PORT_MASK		U(0x00000080)
179*28279cf2SJiafei Pan 
180*28279cf2SJiafei Pan #define NAND_DEFAULT_CSPR		U(0x00000053)
181*28279cf2SJiafei Pan #define NAND_DEFAULT_CSOR		U(0x0180C00C)
182*28279cf2SJiafei Pan #define NAND_DEFAULT_EXT_CSPR		U(0x00000000)
183*28279cf2SJiafei Pan #define NAND_DEFAULT_EXT_CSOR		U(0x00000000)
184*28279cf2SJiafei Pan #define NAND_DEFAULT_FTIM0		U(0x181c0c10)
185*28279cf2SJiafei Pan #define NAND_DEFAULT_FTIM1		U(0x5454141e)
186*28279cf2SJiafei Pan #define NAND_DEFAULT_FTIM2		U(0x03808034)
187*28279cf2SJiafei Pan #define NAND_DEFAULT_FTIM3		U(0x2c000000)
188*28279cf2SJiafei Pan 
189*28279cf2SJiafei Pan #define NAND_CSOR_ECC_MODE_DISABLE	U(0x00000000)
190*28279cf2SJiafei Pan #define NAND_CSOR_ECC_MODE0		U(0x84000000)
191*28279cf2SJiafei Pan #define NAND_CSOR_ECC_MODE1		U(0x94000000)
192*28279cf2SJiafei Pan #define NAND_CSOR_ECC_MODE2		U(0xa4000000)
193*28279cf2SJiafei Pan #define NAND_CSOR_ECC_MODE3		U(0xb4000000)
194*28279cf2SJiafei Pan #define NAND_CSOR_PAGE_SIZE_2K		(0x1 << 19)
195*28279cf2SJiafei Pan #define NAND_CSOR_PAGE_SIZE_4K		(0x2 << 19)
196*28279cf2SJiafei Pan #define NAND_CSOR_PAGE_SIZE_8K		(0x3 << 19)
197*28279cf2SJiafei Pan #define NAND_CSOR_PAGE_SIZE_16K		(0x4 << 19)
198*28279cf2SJiafei Pan #define NAND_CSOR_PPB_64		(0x1 << 8)
199*28279cf2SJiafei Pan #define NAND_CSOR_PPB_128		(0x2 << 8)
200*28279cf2SJiafei Pan #define NAND_CSOR_PPB_256		(0x3 << 8)
201*28279cf2SJiafei Pan #define NAND_CSOR_PPB_512		(0x4 << 8)
202*28279cf2SJiafei Pan 
203*28279cf2SJiafei Pan /* BBI INDICATOR for NAND_2K(CFG_RCW_SRC[1]) for
204*28279cf2SJiafei Pan  * devices greater than 2K page size(CFG_RCW_SRC[3])
205*28279cf2SJiafei Pan  */
206*28279cf2SJiafei Pan #define RCW_SRC_NAND_BBI_MASK		U(0x00000008)
207*28279cf2SJiafei Pan #define RCW_SRC_NAND_BBI_MASK_NAND_2K	U(0x00000002)
208*28279cf2SJiafei Pan #define NAND_BBI_ONFI_2K		(0x1 << 1)
209*28279cf2SJiafei Pan #define NAND_BBI_ONFI			(0x1 << 3)
210*28279cf2SJiafei Pan 
211*28279cf2SJiafei Pan #define RCW_SRC_NAND_PAGE_MASK		U(0x00000070)
212*28279cf2SJiafei Pan #define RCW_SRC_NAND_PAGE_MASK_NAND_2K	U(0x0000000C)
213*28279cf2SJiafei Pan #define NAND_2K_XXX			0x00
214*28279cf2SJiafei Pan #define NAND_2K_64			0x04
215*28279cf2SJiafei Pan #define NAND_2K_128			0x08
216*28279cf2SJiafei Pan #define NAND_4K_128			0x10
217*28279cf2SJiafei Pan #define NAND_4K_256			0x20
218*28279cf2SJiafei Pan #define NAND_4K_512			0x30
219*28279cf2SJiafei Pan #define NAND_8K_128			0x40
220*28279cf2SJiafei Pan #define NAND_8K_256			0x50
221*28279cf2SJiafei Pan #define NAND_8K_512			0x60
222*28279cf2SJiafei Pan #define NAND_16K_512			0x70
223*28279cf2SJiafei Pan #define BLOCK_LEN_2K			2048
224*28279cf2SJiafei Pan 
225*28279cf2SJiafei Pan #define RCW_SRC_NAND_ECC_MASK		U(0x00000007)
226*28279cf2SJiafei Pan #define RCW_SRC_NAND_ECC_MASK_NAND_2K	U(0x00000001)
227*28279cf2SJiafei Pan #define NAND_ECC_DISABLE		0x0
228*28279cf2SJiafei Pan #define NAND_ECC_4_520			0x1
229*28279cf2SJiafei Pan #define NAND_ECC_8_528			0x5
230*28279cf2SJiafei Pan #define NAND_ECC_24_1K			0x6
231*28279cf2SJiafei Pan #define NAND_ECC_40_1K			0x7
232*28279cf2SJiafei Pan 
233*28279cf2SJiafei Pan #define NAND_SPARE_2K			U(0x00000040)
234*28279cf2SJiafei Pan #define NAND_SPARE_4K_ECC_M0		U(0x00000080)
235*28279cf2SJiafei Pan #define NAND_SPARE_4K_ECC_M1		U(0x000000D2)
236*28279cf2SJiafei Pan #define NAND_SPARE_4K_ECC_M2		U(0x000000B0)
237*28279cf2SJiafei Pan #define NAND_SPARE_4K_ECC_M3		U(0x00000120)
238*28279cf2SJiafei Pan #define NAND_SPARE_8K_ECC_M0		U(0x00000088)
239*28279cf2SJiafei Pan #define NAND_SPARE_8K_ECC_M1		U(0x00000108)
240*28279cf2SJiafei Pan #define NAND_SPARE_8K_ECC_M2		U(0x00000158)
241*28279cf2SJiafei Pan #define NAND_SPARE_8K_ECC_M3		U(0x00000238)
242*28279cf2SJiafei Pan #define NAND_SPARE_16K_ECC_M0		U(0x00000108)
243*28279cf2SJiafei Pan #define NAND_SPARE_16K_ECC_M1		U(0x00000208)
244*28279cf2SJiafei Pan #define NAND_SPARE_16K_ECC_M2		U(0x000002A8)
245*28279cf2SJiafei Pan #define NAND_SPARE_16K_ECC_M3		U(0x00000468)
246*28279cf2SJiafei Pan 
247*28279cf2SJiafei Pan struct nand_info {
248*28279cf2SJiafei Pan 	uintptr_t ifc_register_addr;
249*28279cf2SJiafei Pan 	uintptr_t ifc_region_addr;
250*28279cf2SJiafei Pan 	uint32_t page_size;
251*28279cf2SJiafei Pan 	uint32_t port_size;
252*28279cf2SJiafei Pan 	uint32_t blk_size;
253*28279cf2SJiafei Pan 	uint32_t ppb;
254*28279cf2SJiafei Pan 	uint32_t pi_width;	/* Bits Required to index a page in block */
255*28279cf2SJiafei Pan 	uint32_t ral;
256*28279cf2SJiafei Pan 	uint32_t ibr_flow;
257*28279cf2SJiafei Pan 	uint32_t bbt[BBT_SIZE];
258*28279cf2SJiafei Pan 	uint32_t lgb;		/* Last Good Block */
259*28279cf2SJiafei Pan 	uint32_t bbt_max;	/* Total entries in bbt */
260*28279cf2SJiafei Pan 	uint32_t bzero_good;
261*28279cf2SJiafei Pan 	uint8_t bbs;
262*28279cf2SJiafei Pan 	uint8_t bad_marker_loc;
263*28279cf2SJiafei Pan 	uint8_t onfi_dev_flag;
264*28279cf2SJiafei Pan 	uint8_t init_time_boot_flag;
265*28279cf2SJiafei Pan 	uint8_t *buf;
266*28279cf2SJiafei Pan };
267*28279cf2SJiafei Pan 
268*28279cf2SJiafei Pan struct ifc_regs {
269*28279cf2SJiafei Pan 	uint32_t ext_cspr;
270*28279cf2SJiafei Pan 	uint32_t cspr;
271*28279cf2SJiafei Pan 	uint32_t csor;
272*28279cf2SJiafei Pan 	uint32_t ext_csor;
273*28279cf2SJiafei Pan };
274*28279cf2SJiafei Pan 
275*28279cf2SJiafei Pan struct sec_nand_info {
276*28279cf2SJiafei Pan 	uint32_t cspr_port_size;
277*28279cf2SJiafei Pan 	uint32_t csor_ecc_mode;
278*28279cf2SJiafei Pan 	uint32_t csor_page_size;
279*28279cf2SJiafei Pan 	uint32_t csor_ppb;
280*28279cf2SJiafei Pan 	uint32_t ext_csor_spare_size;
281*28279cf2SJiafei Pan 	uint32_t onfi_flag;
282*28279cf2SJiafei Pan };
283*28279cf2SJiafei Pan 
284*28279cf2SJiafei Pan struct sec_nor_info {
285*28279cf2SJiafei Pan 	uint32_t cspr_port_size;
286*28279cf2SJiafei Pan 	uint32_t csor_nor_mode;
287*28279cf2SJiafei Pan 	uint32_t csor_adm_shift;
288*28279cf2SJiafei Pan 	uint32_t port_size;
289*28279cf2SJiafei Pan 	uint32_t addr_bits;
290*28279cf2SJiafei Pan };
291*28279cf2SJiafei Pan 
292*28279cf2SJiafei Pan enum ifc_chip_sel {
293*28279cf2SJiafei Pan 	IFC_CS0,
294*28279cf2SJiafei Pan 	IFC_CS1,
295*28279cf2SJiafei Pan 	IFC_CS2,
296*28279cf2SJiafei Pan 	IFC_CS3,
297*28279cf2SJiafei Pan 	IFC_CS4,
298*28279cf2SJiafei Pan 	IFC_CS5,
299*28279cf2SJiafei Pan 	IFC_CS6,
300*28279cf2SJiafei Pan 	IFC_CS7,
301*28279cf2SJiafei Pan };
302*28279cf2SJiafei Pan 
303*28279cf2SJiafei Pan enum ifc_ftims {
304*28279cf2SJiafei Pan 	IFC_FTIM0,
305*28279cf2SJiafei Pan 	IFC_FTIM1,
306*28279cf2SJiafei Pan 	IFC_FTIM2,
307*28279cf2SJiafei Pan 	IFC_FTIM3,
308*28279cf2SJiafei Pan };
309*28279cf2SJiafei Pan 
310*28279cf2SJiafei Pan #ifdef NXP_IFC_BE
311*28279cf2SJiafei Pan #define nand_in32(a)		bswap32(mmio_read_32((uintptr_t)a))
312*28279cf2SJiafei Pan #define nand_out32(a, v)	mmio_write_32((uintptr_t)a, bswap32(v))
313*28279cf2SJiafei Pan #else
314*28279cf2SJiafei Pan #define nand_in32(a)		mmio_read_32((uintptr_t)a)
315*28279cf2SJiafei Pan #define nand_out32(a, v)	mmio_write_32((uintptr_t)a, v)
316*28279cf2SJiafei Pan #endif
317*28279cf2SJiafei Pan 
318*28279cf2SJiafei Pan /* Read Write on IFC registers */
write_reg(struct nand_info * nand,uint32_t reg,uint32_t val)319*28279cf2SJiafei Pan static inline void write_reg(struct nand_info *nand, uint32_t reg, uint32_t val)
320*28279cf2SJiafei Pan {
321*28279cf2SJiafei Pan 	nand_out32(nand->ifc_register_addr + reg, val);
322*28279cf2SJiafei Pan }
323*28279cf2SJiafei Pan 
read_reg(struct nand_info * nand,uint32_t reg)324*28279cf2SJiafei Pan static inline uint32_t read_reg(struct nand_info *nand, uint32_t reg)
325*28279cf2SJiafei Pan {
326*28279cf2SJiafei Pan 	return nand_in32(nand->ifc_register_addr + reg);
327*28279cf2SJiafei Pan }
328*28279cf2SJiafei Pan 
329*28279cf2SJiafei Pan #endif /* IFC_H */
330