xref: /openbmc/u-boot/arch/arm/include/asm/mach-imx/regs-gpmi.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2552a848eSStefano Babic /*
3552a848eSStefano Babic  * Freescale i.MX28 GPMI Register Definitions
4552a848eSStefano Babic  *
5552a848eSStefano Babic  * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
6552a848eSStefano Babic  * on behalf of DENX Software Engineering GmbH
7552a848eSStefano Babic  *
8552a848eSStefano Babic  * Based on code from LTIB:
9552a848eSStefano Babic  * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
10552a848eSStefano Babic  */
11552a848eSStefano Babic 
12552a848eSStefano Babic #ifndef __MX28_REGS_GPMI_H__
13552a848eSStefano Babic #define __MX28_REGS_GPMI_H__
14552a848eSStefano Babic 
15552a848eSStefano Babic #include <asm/mach-imx/regs-common.h>
16552a848eSStefano Babic 
17552a848eSStefano Babic #ifndef	__ASSEMBLY__
18552a848eSStefano Babic struct mxs_gpmi_regs {
19552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_ctrl0)
20552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_compare)
21552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_eccctrl)
22552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_ecccount)
23552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_payload)
24552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_auxiliary)
25552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_ctrl1)
26552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_timing0)
27552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_timing1)
28552a848eSStefano Babic 
29552a848eSStefano Babic 	uint32_t	reserved[4];
30552a848eSStefano Babic 
31552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_data)
32552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_stat)
33552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_debug)
34552a848eSStefano Babic 	mxs_reg_32(hw_gpmi_version)
35552a848eSStefano Babic };
36552a848eSStefano Babic #endif
37552a848eSStefano Babic 
38552a848eSStefano Babic #define	GPMI_CTRL0_SFTRST				(1 << 31)
39552a848eSStefano Babic #define	GPMI_CTRL0_CLKGATE				(1 << 30)
40552a848eSStefano Babic #define	GPMI_CTRL0_RUN					(1 << 29)
41552a848eSStefano Babic #define	GPMI_CTRL0_DEV_IRQ_EN				(1 << 28)
42552a848eSStefano Babic #define	GPMI_CTRL0_LOCK_CS				(1 << 27)
43552a848eSStefano Babic #define	GPMI_CTRL0_UDMA					(1 << 26)
44552a848eSStefano Babic #define	GPMI_CTRL0_COMMAND_MODE_MASK			(0x3 << 24)
45552a848eSStefano Babic #define	GPMI_CTRL0_COMMAND_MODE_OFFSET			24
46552a848eSStefano Babic #define	GPMI_CTRL0_COMMAND_MODE_WRITE			(0x0 << 24)
47552a848eSStefano Babic #define	GPMI_CTRL0_COMMAND_MODE_READ			(0x1 << 24)
48552a848eSStefano Babic #define	GPMI_CTRL0_COMMAND_MODE_READ_AND_COMPARE	(0x2 << 24)
49552a848eSStefano Babic #define	GPMI_CTRL0_COMMAND_MODE_WAIT_FOR_READY		(0x3 << 24)
50552a848eSStefano Babic #define	GPMI_CTRL0_WORD_LENGTH				(1 << 23)
51552a848eSStefano Babic #define	GPMI_CTRL0_CS_MASK				(0x7 << 20)
52552a848eSStefano Babic #define	GPMI_CTRL0_CS_OFFSET				20
53552a848eSStefano Babic #define	GPMI_CTRL0_ADDRESS_MASK				(0x7 << 17)
54552a848eSStefano Babic #define	GPMI_CTRL0_ADDRESS_OFFSET			17
55552a848eSStefano Babic #define	GPMI_CTRL0_ADDRESS_NAND_DATA			(0x0 << 17)
56552a848eSStefano Babic #define	GPMI_CTRL0_ADDRESS_NAND_CLE			(0x1 << 17)
57552a848eSStefano Babic #define	GPMI_CTRL0_ADDRESS_NAND_ALE			(0x2 << 17)
58552a848eSStefano Babic #define	GPMI_CTRL0_ADDRESS_INCREMENT			(1 << 16)
59552a848eSStefano Babic #define	GPMI_CTRL0_XFER_COUNT_MASK			0xffff
60552a848eSStefano Babic #define	GPMI_CTRL0_XFER_COUNT_OFFSET			0
61552a848eSStefano Babic 
62552a848eSStefano Babic #define	GPMI_COMPARE_MASK_MASK				(0xffff << 16)
63552a848eSStefano Babic #define	GPMI_COMPARE_MASK_OFFSET			16
64552a848eSStefano Babic #define	GPMI_COMPARE_REFERENCE_MASK			0xffff
65552a848eSStefano Babic #define	GPMI_COMPARE_REFERENCE_OFFSET			0
66552a848eSStefano Babic 
67552a848eSStefano Babic #define	GPMI_ECCCTRL_HANDLE_MASK			(0xffff << 16)
68552a848eSStefano Babic #define	GPMI_ECCCTRL_HANDLE_OFFSET			16
69552a848eSStefano Babic #define	GPMI_ECCCTRL_ECC_CMD_MASK			(0x3 << 13)
70552a848eSStefano Babic #define	GPMI_ECCCTRL_ECC_CMD_OFFSET			13
71552a848eSStefano Babic #define	GPMI_ECCCTRL_ECC_CMD_DECODE			(0x0 << 13)
72552a848eSStefano Babic #define	GPMI_ECCCTRL_ECC_CMD_ENCODE			(0x1 << 13)
73552a848eSStefano Babic #define	GPMI_ECCCTRL_ENABLE_ECC				(1 << 12)
74552a848eSStefano Babic #define	GPMI_ECCCTRL_BUFFER_MASK_MASK			0x1ff
75552a848eSStefano Babic #define	GPMI_ECCCTRL_BUFFER_MASK_OFFSET			0
76552a848eSStefano Babic #define	GPMI_ECCCTRL_BUFFER_MASK_BCH_AUXONLY		0x100
77552a848eSStefano Babic #define	GPMI_ECCCTRL_BUFFER_MASK_BCH_PAGE		0x1ff
78552a848eSStefano Babic 
79552a848eSStefano Babic #define	GPMI_ECCCOUNT_COUNT_MASK			0xffff
80552a848eSStefano Babic #define	GPMI_ECCCOUNT_COUNT_OFFSET			0
81552a848eSStefano Babic 
82552a848eSStefano Babic #define	GPMI_PAYLOAD_ADDRESS_MASK			(0x3fffffff << 2)
83552a848eSStefano Babic #define	GPMI_PAYLOAD_ADDRESS_OFFSET			2
84552a848eSStefano Babic 
85552a848eSStefano Babic #define	GPMI_AUXILIARY_ADDRESS_MASK			(0x3fffffff << 2)
86552a848eSStefano Babic #define	GPMI_AUXILIARY_ADDRESS_OFFSET			2
87552a848eSStefano Babic 
88552a848eSStefano Babic #define	GPMI_CTRL1_DECOUPLE_CS				(1 << 24)
89552a848eSStefano Babic #define	GPMI_CTRL1_WRN_DLY_SEL_MASK			(0x3 << 22)
90552a848eSStefano Babic #define	GPMI_CTRL1_WRN_DLY_SEL_OFFSET			22
91552a848eSStefano Babic #define	GPMI_CTRL1_TIMEOUT_IRQ_EN			(1 << 20)
92552a848eSStefano Babic #define	GPMI_CTRL1_GANGED_RDYBUSY			(1 << 19)
93552a848eSStefano Babic #define	GPMI_CTRL1_BCH_MODE				(1 << 18)
94552a848eSStefano Babic #define	GPMI_CTRL1_DLL_ENABLE				(1 << 17)
95552a848eSStefano Babic #define	GPMI_CTRL1_HALF_PERIOD				(1 << 16)
96552a848eSStefano Babic #define	GPMI_CTRL1_RDN_DELAY_MASK			(0xf << 12)
97552a848eSStefano Babic #define	GPMI_CTRL1_RDN_DELAY_OFFSET			12
98552a848eSStefano Babic #define	GPMI_CTRL1_DMA2ECC_MODE				(1 << 11)
99552a848eSStefano Babic #define	GPMI_CTRL1_DEV_IRQ				(1 << 10)
100552a848eSStefano Babic #define	GPMI_CTRL1_TIMEOUT_IRQ				(1 << 9)
101552a848eSStefano Babic #define	GPMI_CTRL1_BURST_EN				(1 << 8)
102552a848eSStefano Babic #define	GPMI_CTRL1_ABORT_WAIT_REQUEST			(1 << 7)
103552a848eSStefano Babic #define	GPMI_CTRL1_ABORT_WAIT_FOR_READY_CHANNEL_MASK	(0x7 << 4)
104552a848eSStefano Babic #define	GPMI_CTRL1_ABORT_WAIT_FOR_READY_CHANNEL_OFFSET	4
105552a848eSStefano Babic #define	GPMI_CTRL1_DEV_RESET				(1 << 3)
106552a848eSStefano Babic #define	GPMI_CTRL1_ATA_IRQRDY_POLARITY			(1 << 2)
107552a848eSStefano Babic #define	GPMI_CTRL1_CAMERA_MODE				(1 << 1)
108552a848eSStefano Babic #define	GPMI_CTRL1_GPMI_MODE				(1 << 0)
109552a848eSStefano Babic 
110552a848eSStefano Babic #define	GPMI_TIMING0_ADDRESS_SETUP_MASK			(0xff << 16)
111552a848eSStefano Babic #define	GPMI_TIMING0_ADDRESS_SETUP_OFFSET		16
112552a848eSStefano Babic #define	GPMI_TIMING0_DATA_HOLD_MASK			(0xff << 8)
113552a848eSStefano Babic #define	GPMI_TIMING0_DATA_HOLD_OFFSET			8
114552a848eSStefano Babic #define	GPMI_TIMING0_DATA_SETUP_MASK			0xff
115552a848eSStefano Babic #define	GPMI_TIMING0_DATA_SETUP_OFFSET			0
116552a848eSStefano Babic 
117552a848eSStefano Babic #define	GPMI_TIMING1_DEVICE_BUSY_TIMEOUT_MASK		(0xffff << 16)
118552a848eSStefano Babic #define	GPMI_TIMING1_DEVICE_BUSY_TIMEOUT_OFFSET		16
119552a848eSStefano Babic 
120552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_TRP_MASK			(0xff << 24)
121552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_TRP_OFFSET			24
122552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_ENV_MASK			(0xff << 16)
123552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_ENV_OFFSET			16
124552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_HOLD_MASK			(0xff << 8)
125552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_HOLD_OFFSET			8
126552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_SETUP_MASK			0xff
127552a848eSStefano Babic #define	GPMI_TIMING2_UDMA_SETUP_OFFSET			0
128552a848eSStefano Babic 
129552a848eSStefano Babic #define	GPMI_DATA_DATA_MASK				0xffffffff
130552a848eSStefano Babic #define	GPMI_DATA_DATA_OFFSET				0
131552a848eSStefano Babic 
132552a848eSStefano Babic #define	GPMI_STAT_READY_BUSY_MASK			(0xff << 24)
133552a848eSStefano Babic #define	GPMI_STAT_READY_BUSY_OFFSET			24
134552a848eSStefano Babic #define	GPMI_STAT_RDY_TIMEOUT_MASK			(0xff << 16)
135552a848eSStefano Babic #define	GPMI_STAT_RDY_TIMEOUT_OFFSET			16
136552a848eSStefano Babic #define	GPMI_STAT_DEV7_ERROR				(1 << 15)
137552a848eSStefano Babic #define	GPMI_STAT_DEV6_ERROR				(1 << 14)
138552a848eSStefano Babic #define	GPMI_STAT_DEV5_ERROR				(1 << 13)
139552a848eSStefano Babic #define	GPMI_STAT_DEV4_ERROR				(1 << 12)
140552a848eSStefano Babic #define	GPMI_STAT_DEV3_ERROR				(1 << 11)
141552a848eSStefano Babic #define	GPMI_STAT_DEV2_ERROR				(1 << 10)
142552a848eSStefano Babic #define	GPMI_STAT_DEV1_ERROR				(1 << 9)
143552a848eSStefano Babic #define	GPMI_STAT_DEV0_ERROR				(1 << 8)
144552a848eSStefano Babic #define	GPMI_STAT_ATA_IRQ				(1 << 4)
145552a848eSStefano Babic #define	GPMI_STAT_INVALID_BUFFER_MASK			(1 << 3)
146552a848eSStefano Babic #define	GPMI_STAT_FIFO_EMPTY				(1 << 2)
147552a848eSStefano Babic #define	GPMI_STAT_FIFO_FULL				(1 << 1)
148552a848eSStefano Babic #define	GPMI_STAT_PRESENT				(1 << 0)
149552a848eSStefano Babic 
150552a848eSStefano Babic #define	GPMI_DEBUG_WAIT_FOR_READY_END_MASK		(0xff << 24)
151552a848eSStefano Babic #define	GPMI_DEBUG_WAIT_FOR_READY_END_OFFSET		24
152552a848eSStefano Babic #define	GPMI_DEBUG_DMA_SENSE_MASK			(0xff << 16)
153552a848eSStefano Babic #define	GPMI_DEBUG_DMA_SENSE_OFFSET			16
154552a848eSStefano Babic #define	GPMI_DEBUG_DMAREQ_MASK				(0xff << 8)
155552a848eSStefano Babic #define	GPMI_DEBUG_DMAREQ_OFFSET			8
156552a848eSStefano Babic #define	GPMI_DEBUG_CMD_END_MASK				0xff
157552a848eSStefano Babic #define	GPMI_DEBUG_CMD_END_OFFSET			0
158552a848eSStefano Babic 
159552a848eSStefano Babic #define	GPMI_VERSION_MAJOR_MASK				(0xff << 24)
160552a848eSStefano Babic #define	GPMI_VERSION_MAJOR_OFFSET			24
161552a848eSStefano Babic #define	GPMI_VERSION_MINOR_MASK				(0xff << 16)
162552a848eSStefano Babic #define	GPMI_VERSION_MINOR_OFFSET			16
163552a848eSStefano Babic #define	GPMI_VERSION_STEP_MASK				0xffff
164552a848eSStefano Babic #define	GPMI_VERSION_STEP_OFFSET			0
165552a848eSStefano Babic 
166552a848eSStefano Babic #define	GPMI_DEBUG2_UDMA_STATE_MASK			(0xf << 24)
167552a848eSStefano Babic #define	GPMI_DEBUG2_UDMA_STATE_OFFSET			24
168552a848eSStefano Babic #define	GPMI_DEBUG2_BUSY				(1 << 23)
169552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_MASK			(0x7 << 20)
170552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_OFFSET			20
171552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_IDLE			(0x0 << 20)
172552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_BYTCNT		(0x1 << 20)
173552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_ADDR			(0x2 << 20)
174552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_STALL			(0x3 << 20)
175552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_STROBE		(0x4 << 20)
176552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_ATARDY		(0x5 << 20)
177552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_DHOLD			(0x6 << 20)
178552a848eSStefano Babic #define	GPMI_DEBUG2_PIN_STATE_PSM_DONE			(0x7 << 20)
179552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MASK			(0xf << 16)
180552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_OFFSET			16
181552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_IDLE			(0x0 << 16)
182552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_BYTCNT		(0x1 << 16)
183552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_WAITFE		(0x2 << 16)
184552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_WAITFR		(0x3 << 16)
185552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_DMAREQ		(0x4 << 16)
186552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_DMAACK		(0x5 << 16)
187552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_WAITFF		(0x6 << 16)
188552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_LDFIFO		(0x7 << 16)
189552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_LDDMAR		(0x8 << 16)
190552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_RDCMP		(0x9 << 16)
191552a848eSStefano Babic #define	GPMI_DEBUG2_MAIN_STATE_MSM_DONE			(0xa << 16)
192552a848eSStefano Babic #define	GPMI_DEBUG2_SYND2GPMI_BE_MASK			(0xf << 12)
193552a848eSStefano Babic #define	GPMI_DEBUG2_SYND2GPMI_BE_OFFSET			12
194552a848eSStefano Babic #define	GPMI_DEBUG2_GPMI2SYND_VALID			(1 << 11)
195552a848eSStefano Babic #define	GPMI_DEBUG2_GPMI2SYND_READY			(1 << 10)
196552a848eSStefano Babic #define	GPMI_DEBUG2_SYND2GPMI_VALID			(1 << 9)
197552a848eSStefano Babic #define	GPMI_DEBUG2_SYND2GPMI_READY			(1 << 8)
198552a848eSStefano Babic #define	GPMI_DEBUG2_VIEW_DELAYED_RDN			(1 << 7)
199552a848eSStefano Babic #define	GPMI_DEBUG2_UPDATE_WINDOW			(1 << 6)
200552a848eSStefano Babic #define	GPMI_DEBUG2_RDN_TAP_MASK			0x3f
201552a848eSStefano Babic #define	GPMI_DEBUG2_RDN_TAP_OFFSET			0
202552a848eSStefano Babic 
203552a848eSStefano Babic #define	GPMI_DEBUG3_APB_WORD_CNTR_MASK			(0xffff << 16)
204552a848eSStefano Babic #define	GPMI_DEBUG3_APB_WORD_CNTR_OFFSET		16
205552a848eSStefano Babic #define	GPMI_DEBUG3_DEV_WORD_CNTR_MASK			0xffff
206552a848eSStefano Babic #define	GPMI_DEBUG3_DEV_WORD_CNTR_OFFSET		0
207552a848eSStefano Babic 
208552a848eSStefano Babic #endif	/* __MX28_REGS_GPMI_H__ */
209