xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/mach-imx/regs-gpmi.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Freescale i.MX28 GPMI Register Definitions
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
5*4882a593Smuzhiyun  * on behalf of DENX Software Engineering GmbH
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Based on code from LTIB:
8*4882a593Smuzhiyun  * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #ifndef __MX28_REGS_GPMI_H__
14*4882a593Smuzhiyun #define __MX28_REGS_GPMI_H__
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #include <asm/mach-imx/regs-common.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifndef	__ASSEMBLY__
19*4882a593Smuzhiyun struct mxs_gpmi_regs {
20*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_ctrl0)
21*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_compare)
22*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_eccctrl)
23*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_ecccount)
24*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_payload)
25*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_auxiliary)
26*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_ctrl1)
27*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_timing0)
28*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_timing1)
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	uint32_t	reserved[4];
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_data)
33*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_stat)
34*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_debug)
35*4882a593Smuzhiyun 	mxs_reg_32(hw_gpmi_version)
36*4882a593Smuzhiyun };
37*4882a593Smuzhiyun #endif
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define	GPMI_CTRL0_SFTRST				(1 << 31)
40*4882a593Smuzhiyun #define	GPMI_CTRL0_CLKGATE				(1 << 30)
41*4882a593Smuzhiyun #define	GPMI_CTRL0_RUN					(1 << 29)
42*4882a593Smuzhiyun #define	GPMI_CTRL0_DEV_IRQ_EN				(1 << 28)
43*4882a593Smuzhiyun #define	GPMI_CTRL0_LOCK_CS				(1 << 27)
44*4882a593Smuzhiyun #define	GPMI_CTRL0_UDMA					(1 << 26)
45*4882a593Smuzhiyun #define	GPMI_CTRL0_COMMAND_MODE_MASK			(0x3 << 24)
46*4882a593Smuzhiyun #define	GPMI_CTRL0_COMMAND_MODE_OFFSET			24
47*4882a593Smuzhiyun #define	GPMI_CTRL0_COMMAND_MODE_WRITE			(0x0 << 24)
48*4882a593Smuzhiyun #define	GPMI_CTRL0_COMMAND_MODE_READ			(0x1 << 24)
49*4882a593Smuzhiyun #define	GPMI_CTRL0_COMMAND_MODE_READ_AND_COMPARE	(0x2 << 24)
50*4882a593Smuzhiyun #define	GPMI_CTRL0_COMMAND_MODE_WAIT_FOR_READY		(0x3 << 24)
51*4882a593Smuzhiyun #define	GPMI_CTRL0_WORD_LENGTH				(1 << 23)
52*4882a593Smuzhiyun #define	GPMI_CTRL0_CS_MASK				(0x7 << 20)
53*4882a593Smuzhiyun #define	GPMI_CTRL0_CS_OFFSET				20
54*4882a593Smuzhiyun #define	GPMI_CTRL0_ADDRESS_MASK				(0x7 << 17)
55*4882a593Smuzhiyun #define	GPMI_CTRL0_ADDRESS_OFFSET			17
56*4882a593Smuzhiyun #define	GPMI_CTRL0_ADDRESS_NAND_DATA			(0x0 << 17)
57*4882a593Smuzhiyun #define	GPMI_CTRL0_ADDRESS_NAND_CLE			(0x1 << 17)
58*4882a593Smuzhiyun #define	GPMI_CTRL0_ADDRESS_NAND_ALE			(0x2 << 17)
59*4882a593Smuzhiyun #define	GPMI_CTRL0_ADDRESS_INCREMENT			(1 << 16)
60*4882a593Smuzhiyun #define	GPMI_CTRL0_XFER_COUNT_MASK			0xffff
61*4882a593Smuzhiyun #define	GPMI_CTRL0_XFER_COUNT_OFFSET			0
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun #define	GPMI_COMPARE_MASK_MASK				(0xffff << 16)
64*4882a593Smuzhiyun #define	GPMI_COMPARE_MASK_OFFSET			16
65*4882a593Smuzhiyun #define	GPMI_COMPARE_REFERENCE_MASK			0xffff
66*4882a593Smuzhiyun #define	GPMI_COMPARE_REFERENCE_OFFSET			0
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #define	GPMI_ECCCTRL_HANDLE_MASK			(0xffff << 16)
69*4882a593Smuzhiyun #define	GPMI_ECCCTRL_HANDLE_OFFSET			16
70*4882a593Smuzhiyun #define	GPMI_ECCCTRL_ECC_CMD_MASK			(0x3 << 13)
71*4882a593Smuzhiyun #define	GPMI_ECCCTRL_ECC_CMD_OFFSET			13
72*4882a593Smuzhiyun #define	GPMI_ECCCTRL_ECC_CMD_DECODE			(0x0 << 13)
73*4882a593Smuzhiyun #define	GPMI_ECCCTRL_ECC_CMD_ENCODE			(0x1 << 13)
74*4882a593Smuzhiyun #define	GPMI_ECCCTRL_ENABLE_ECC				(1 << 12)
75*4882a593Smuzhiyun #define	GPMI_ECCCTRL_BUFFER_MASK_MASK			0x1ff
76*4882a593Smuzhiyun #define	GPMI_ECCCTRL_BUFFER_MASK_OFFSET			0
77*4882a593Smuzhiyun #define	GPMI_ECCCTRL_BUFFER_MASK_BCH_AUXONLY		0x100
78*4882a593Smuzhiyun #define	GPMI_ECCCTRL_BUFFER_MASK_BCH_PAGE		0x1ff
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun #define	GPMI_ECCCOUNT_COUNT_MASK			0xffff
81*4882a593Smuzhiyun #define	GPMI_ECCCOUNT_COUNT_OFFSET			0
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #define	GPMI_PAYLOAD_ADDRESS_MASK			(0x3fffffff << 2)
84*4882a593Smuzhiyun #define	GPMI_PAYLOAD_ADDRESS_OFFSET			2
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun #define	GPMI_AUXILIARY_ADDRESS_MASK			(0x3fffffff << 2)
87*4882a593Smuzhiyun #define	GPMI_AUXILIARY_ADDRESS_OFFSET			2
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #define	GPMI_CTRL1_DECOUPLE_CS				(1 << 24)
90*4882a593Smuzhiyun #define	GPMI_CTRL1_WRN_DLY_SEL_MASK			(0x3 << 22)
91*4882a593Smuzhiyun #define	GPMI_CTRL1_WRN_DLY_SEL_OFFSET			22
92*4882a593Smuzhiyun #define	GPMI_CTRL1_TIMEOUT_IRQ_EN			(1 << 20)
93*4882a593Smuzhiyun #define	GPMI_CTRL1_GANGED_RDYBUSY			(1 << 19)
94*4882a593Smuzhiyun #define	GPMI_CTRL1_BCH_MODE				(1 << 18)
95*4882a593Smuzhiyun #define	GPMI_CTRL1_DLL_ENABLE				(1 << 17)
96*4882a593Smuzhiyun #define	GPMI_CTRL1_HALF_PERIOD				(1 << 16)
97*4882a593Smuzhiyun #define	GPMI_CTRL1_RDN_DELAY_MASK			(0xf << 12)
98*4882a593Smuzhiyun #define	GPMI_CTRL1_RDN_DELAY_OFFSET			12
99*4882a593Smuzhiyun #define	GPMI_CTRL1_DMA2ECC_MODE				(1 << 11)
100*4882a593Smuzhiyun #define	GPMI_CTRL1_DEV_IRQ				(1 << 10)
101*4882a593Smuzhiyun #define	GPMI_CTRL1_TIMEOUT_IRQ				(1 << 9)
102*4882a593Smuzhiyun #define	GPMI_CTRL1_BURST_EN				(1 << 8)
103*4882a593Smuzhiyun #define	GPMI_CTRL1_ABORT_WAIT_REQUEST			(1 << 7)
104*4882a593Smuzhiyun #define	GPMI_CTRL1_ABORT_WAIT_FOR_READY_CHANNEL_MASK	(0x7 << 4)
105*4882a593Smuzhiyun #define	GPMI_CTRL1_ABORT_WAIT_FOR_READY_CHANNEL_OFFSET	4
106*4882a593Smuzhiyun #define	GPMI_CTRL1_DEV_RESET				(1 << 3)
107*4882a593Smuzhiyun #define	GPMI_CTRL1_ATA_IRQRDY_POLARITY			(1 << 2)
108*4882a593Smuzhiyun #define	GPMI_CTRL1_CAMERA_MODE				(1 << 1)
109*4882a593Smuzhiyun #define	GPMI_CTRL1_GPMI_MODE				(1 << 0)
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun #define	GPMI_TIMING0_ADDRESS_SETUP_MASK			(0xff << 16)
112*4882a593Smuzhiyun #define	GPMI_TIMING0_ADDRESS_SETUP_OFFSET		16
113*4882a593Smuzhiyun #define	GPMI_TIMING0_DATA_HOLD_MASK			(0xff << 8)
114*4882a593Smuzhiyun #define	GPMI_TIMING0_DATA_HOLD_OFFSET			8
115*4882a593Smuzhiyun #define	GPMI_TIMING0_DATA_SETUP_MASK			0xff
116*4882a593Smuzhiyun #define	GPMI_TIMING0_DATA_SETUP_OFFSET			0
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun #define	GPMI_TIMING1_DEVICE_BUSY_TIMEOUT_MASK		(0xffff << 16)
119*4882a593Smuzhiyun #define	GPMI_TIMING1_DEVICE_BUSY_TIMEOUT_OFFSET		16
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_TRP_MASK			(0xff << 24)
122*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_TRP_OFFSET			24
123*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_ENV_MASK			(0xff << 16)
124*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_ENV_OFFSET			16
125*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_HOLD_MASK			(0xff << 8)
126*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_HOLD_OFFSET			8
127*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_SETUP_MASK			0xff
128*4882a593Smuzhiyun #define	GPMI_TIMING2_UDMA_SETUP_OFFSET			0
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun #define	GPMI_DATA_DATA_MASK				0xffffffff
131*4882a593Smuzhiyun #define	GPMI_DATA_DATA_OFFSET				0
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun #define	GPMI_STAT_READY_BUSY_MASK			(0xff << 24)
134*4882a593Smuzhiyun #define	GPMI_STAT_READY_BUSY_OFFSET			24
135*4882a593Smuzhiyun #define	GPMI_STAT_RDY_TIMEOUT_MASK			(0xff << 16)
136*4882a593Smuzhiyun #define	GPMI_STAT_RDY_TIMEOUT_OFFSET			16
137*4882a593Smuzhiyun #define	GPMI_STAT_DEV7_ERROR				(1 << 15)
138*4882a593Smuzhiyun #define	GPMI_STAT_DEV6_ERROR				(1 << 14)
139*4882a593Smuzhiyun #define	GPMI_STAT_DEV5_ERROR				(1 << 13)
140*4882a593Smuzhiyun #define	GPMI_STAT_DEV4_ERROR				(1 << 12)
141*4882a593Smuzhiyun #define	GPMI_STAT_DEV3_ERROR				(1 << 11)
142*4882a593Smuzhiyun #define	GPMI_STAT_DEV2_ERROR				(1 << 10)
143*4882a593Smuzhiyun #define	GPMI_STAT_DEV1_ERROR				(1 << 9)
144*4882a593Smuzhiyun #define	GPMI_STAT_DEV0_ERROR				(1 << 8)
145*4882a593Smuzhiyun #define	GPMI_STAT_ATA_IRQ				(1 << 4)
146*4882a593Smuzhiyun #define	GPMI_STAT_INVALID_BUFFER_MASK			(1 << 3)
147*4882a593Smuzhiyun #define	GPMI_STAT_FIFO_EMPTY				(1 << 2)
148*4882a593Smuzhiyun #define	GPMI_STAT_FIFO_FULL				(1 << 1)
149*4882a593Smuzhiyun #define	GPMI_STAT_PRESENT				(1 << 0)
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun #define	GPMI_DEBUG_WAIT_FOR_READY_END_MASK		(0xff << 24)
152*4882a593Smuzhiyun #define	GPMI_DEBUG_WAIT_FOR_READY_END_OFFSET		24
153*4882a593Smuzhiyun #define	GPMI_DEBUG_DMA_SENSE_MASK			(0xff << 16)
154*4882a593Smuzhiyun #define	GPMI_DEBUG_DMA_SENSE_OFFSET			16
155*4882a593Smuzhiyun #define	GPMI_DEBUG_DMAREQ_MASK				(0xff << 8)
156*4882a593Smuzhiyun #define	GPMI_DEBUG_DMAREQ_OFFSET			8
157*4882a593Smuzhiyun #define	GPMI_DEBUG_CMD_END_MASK				0xff
158*4882a593Smuzhiyun #define	GPMI_DEBUG_CMD_END_OFFSET			0
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun #define	GPMI_VERSION_MAJOR_MASK				(0xff << 24)
161*4882a593Smuzhiyun #define	GPMI_VERSION_MAJOR_OFFSET			24
162*4882a593Smuzhiyun #define	GPMI_VERSION_MINOR_MASK				(0xff << 16)
163*4882a593Smuzhiyun #define	GPMI_VERSION_MINOR_OFFSET			16
164*4882a593Smuzhiyun #define	GPMI_VERSION_STEP_MASK				0xffff
165*4882a593Smuzhiyun #define	GPMI_VERSION_STEP_OFFSET			0
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun #define	GPMI_DEBUG2_UDMA_STATE_MASK			(0xf << 24)
168*4882a593Smuzhiyun #define	GPMI_DEBUG2_UDMA_STATE_OFFSET			24
169*4882a593Smuzhiyun #define	GPMI_DEBUG2_BUSY				(1 << 23)
170*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_MASK			(0x7 << 20)
171*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_OFFSET			20
172*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_IDLE			(0x0 << 20)
173*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_BYTCNT		(0x1 << 20)
174*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_ADDR			(0x2 << 20)
175*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_STALL			(0x3 << 20)
176*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_STROBE		(0x4 << 20)
177*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_ATARDY		(0x5 << 20)
178*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_DHOLD			(0x6 << 20)
179*4882a593Smuzhiyun #define	GPMI_DEBUG2_PIN_STATE_PSM_DONE			(0x7 << 20)
180*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MASK			(0xf << 16)
181*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_OFFSET			16
182*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_IDLE			(0x0 << 16)
183*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_BYTCNT		(0x1 << 16)
184*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_WAITFE		(0x2 << 16)
185*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_WAITFR		(0x3 << 16)
186*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_DMAREQ		(0x4 << 16)
187*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_DMAACK		(0x5 << 16)
188*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_WAITFF		(0x6 << 16)
189*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_LDFIFO		(0x7 << 16)
190*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_LDDMAR		(0x8 << 16)
191*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_RDCMP		(0x9 << 16)
192*4882a593Smuzhiyun #define	GPMI_DEBUG2_MAIN_STATE_MSM_DONE			(0xa << 16)
193*4882a593Smuzhiyun #define	GPMI_DEBUG2_SYND2GPMI_BE_MASK			(0xf << 12)
194*4882a593Smuzhiyun #define	GPMI_DEBUG2_SYND2GPMI_BE_OFFSET			12
195*4882a593Smuzhiyun #define	GPMI_DEBUG2_GPMI2SYND_VALID			(1 << 11)
196*4882a593Smuzhiyun #define	GPMI_DEBUG2_GPMI2SYND_READY			(1 << 10)
197*4882a593Smuzhiyun #define	GPMI_DEBUG2_SYND2GPMI_VALID			(1 << 9)
198*4882a593Smuzhiyun #define	GPMI_DEBUG2_SYND2GPMI_READY			(1 << 8)
199*4882a593Smuzhiyun #define	GPMI_DEBUG2_VIEW_DELAYED_RDN			(1 << 7)
200*4882a593Smuzhiyun #define	GPMI_DEBUG2_UPDATE_WINDOW			(1 << 6)
201*4882a593Smuzhiyun #define	GPMI_DEBUG2_RDN_TAP_MASK			0x3f
202*4882a593Smuzhiyun #define	GPMI_DEBUG2_RDN_TAP_OFFSET			0
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun #define	GPMI_DEBUG3_APB_WORD_CNTR_MASK			(0xffff << 16)
205*4882a593Smuzhiyun #define	GPMI_DEBUG3_APB_WORD_CNTR_OFFSET		16
206*4882a593Smuzhiyun #define	GPMI_DEBUG3_DEV_WORD_CNTR_MASK			0xffff
207*4882a593Smuzhiyun #define	GPMI_DEBUG3_DEV_WORD_CNTR_OFFSET		0
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun #endif	/* __MX28_REGS_GPMI_H__ */
210