blob: c3cdd7606f1c33acb7363803791beaed56f9fe9a [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#ifndef _QSPI_COMMON_H
2#define _QSPI_COMMON_H
3
4// ---------------------------------------------------------------
5// Memory Map
6// ---------------------------------------------------------------
7#define QSPI0_REG_BASE 0xd420B000 //QSPI1_IPS_BASE_ADDR
8#define QSPI0_ARDB_BASE 0xa0000000 //AHB RX Data Buffer base addr(QSPI_ARDB0 to QSPI_ARDB31)
9#define QSPI0_AMBA_BASE 0x80000000 //AHB base addr
10#define QSPI0_FLASH_A1_BASE_Z1 0x80300000
11#define QSPI0_FLASH_A1_TOP_Z1 0x88300000
12#define QSPI0_FLASH_A1_BASE 0x80000000
13#define QSPI0_FLASH_A1_TOP 0x88000000
14#define QSPI0_FLASH_A2_BASE 0x88000000
15#define QSPI0_FLASH_A2_TOP 0x90000000
16#define QSPI0_FLASH_B1_BASE 0x90000000
17#define QSPI0_FLASH_B1_TOP 0x98000000
18#define QSPI0_FLASH_B2_BASE 0x98000000
19#define QSPI0_FLASH_B2_TOP 0xa0000000
20
21// ---------------------------------------------------------------
22// Register definitions
23// ---------------------------------------------------------------
24#define QSPI_MCR_OFFSET 0x000
25#define QSPI_IPCR_OFFSET 0x008
26#define QSPI_FLSHCR_OFFSET 0x00C
27#define QSPI_BUF0CR_OFFSET 0x010
28#define QSPI_BUF1CR_OFFSET 0x014
29#define QSPI_BUF2CR_OFFSET 0x018
30#define QSPI_BUF3CR_OFFSET 0x01C
31#define QSPI_BFGENCR_OFFSET 0x020
32#define QSPI_SOCCR_OFFSET 0x024
33#define QSPI_BUF0IND_OFFSET 0x030
34#define QSPI_BUF1IND_OFFSET 0x034
35#define QSPI_BUF2IND_OFFSET 0x038
36#define QSPI_DLACR_OFFSET 0x03C
37#define QSPI_SFAR_OFFSET 0x100
38#define QSPI_SFACR_OFFSET 0x104
39#define QSPI_SMPR_OFFSET 0x108
40#define QSPI_RBSR_OFFSET 0x10C
41#define QSPI_RBCT_OFFSET 0x110
42#define QSPI_TBSR_OFFSET 0x150
43#define QSPI_TBDR_OFFSET 0x154
44#define QSPI_TBCT_OFFSET 0x158
45#define QSPI_SR_OFFSET 0x15C
46#define QSPI_FR_OFFSET 0x160
47#define QSPI_RSER_OFFSET 0x164
48#define QSPI_SPNDST_OFFSET 0x168
49#define QSPI_SPTRCLR_OFFSET 0x16C
50#define QSPI_SFA1AD_OFFSET 0x180
51#define QSPI_SFA2AD_OFFSET 0x184
52#define QSPI_SFB1AD_OFFSET 0x188
53#define QSPI_SFB2AD_OFFSET 0x18C
54#define QSPI_DLPV_OFFSET 0x190
55#define QSPI_RBDR0_OFFSET 0x200
56#define QSPI_LUTKEY_OFFSET 0x300
57#define QSPI_LCKCR_OFFSET 0x304
58#define QSPI_LUT0_OFFSET 0x310
59#define QSPI_LUT1_OFFSET 0x314
60#define QSPI_LUT2_OFFSET 0x318
61#define QSPI_LUT3_OFFSET 0x31C
62
63// ---------------------------------------------------------------
64// Register definitions
65// ---------------------------------------------------------------
66#define QSPI0_MCR (QSPI0_REG_BASE + QSPI_MCR_OFFSET)
67#define QSPI0_IPCR (QSPI0_REG_BASE + QSPI_IPCR_OFFSET)
68#define QSPI0_FLSHCR (QSPI0_REG_BASE + QSPI_FLSHCR_OFFSET)
69#define QSPI0_BUF0CR (QSPI0_REG_BASE + QSPI_BUF0CR_OFFSET)
70#define QSPI0_BUF1CR (QSPI0_REG_BASE + QSPI_BUF1CR_OFFSET)
71#define QSPI0_BUF2CR (QSPI0_REG_BASE + QSPI_BUF2CR_OFFSET)
72#define QSPI0_BUF3CR (QSPI0_REG_BASE + QSPI_BUF3CR_OFFSET)
73#define QSPI0_BFGENCR (QSPI0_REG_BASE + QSPI_BFGENCR_OFFSET)
74#define QSPI0_SOCCR (QSPI0_REG_BASE + QSPI_SOCCR_OFFSET)
75#define QSPI0_BUF0IND (QSPI0_REG_BASE + QSPI_BUF0IND_OFFSET)
76#define QSPI0_BUF1IND (QSPI0_REG_BASE + QSPI_BUF1IND_OFFSET)
77#define QSPI0_BUF2IND (QSPI0_REG_BASE + QSPI_BUF2IND_OFFSET)
78#define QSPI0_DLACR (QSPI0_REG_BASE + QSPI_DLACR_OFFSET)
79#define QSPI0_SFAR (QSPI0_REG_BASE + QSPI_SFAR_OFFSET)
80#define QSPI0_SFACR (QSPI0_REG_BASE + QSPI_SFACR_OFFSET)
81#define QSPI0_SMPR (QSPI0_REG_BASE + QSPI_SMPR_OFFSET)
82#define QSPI0_RBSR (QSPI0_REG_BASE + QSPI_RBSR_OFFSET)
83#define QSPI0_RBCT (QSPI0_REG_BASE + QSPI_RBCT_OFFSET)
84#define QSPI0_TBSR (QSPI0_REG_BASE + QSPI_TBSR_OFFSET)
85#define QSPI0_TBDR (QSPI0_REG_BASE + QSPI_TBDR_OFFSET)
86#define QSPI0_TBCT (QSPI0_REG_BASE + QSPI_TBCT_OFFSET)
87#define QSPI0_SR (QSPI0_REG_BASE + QSPI_SR_OFFSET)
88#define QSPI0_FR (QSPI0_REG_BASE + QSPI_FR_OFFSET)
89#define QSPI0_RSER (QSPI0_REG_BASE + QSPI_RSER_OFFSET)
90#define QSPI0_SPNDST (QSPI0_REG_BASE + QSPI_SPNDST_OFFSET)
91#define QSPI0_SPTRCLR (QSPI0_REG_BASE + QSPI_SPTRCLR_OFFSET)
92#define QSPI0_SFA1AD (QSPI0_REG_BASE + QSPI_SFA1AD_OFFSET)
93#define QSPI0_SFA2AD (QSPI0_REG_BASE + QSPI_SFA2AD_OFFSET)
94#define QSPI0_SFB1AD (QSPI0_REG_BASE + QSPI_SFB1AD_OFFSET)
95#define QSPI0_SFB2AD (QSPI0_REG_BASE + QSPI_SFB2AD_OFFSET)
96#define QSPI0_DLPV (QSPI0_REG_BASE + QSPI_DLPV_OFFSET)
97#define QSPI0_RBDR0 (QSPI0_REG_BASE + QSPI_RBDR0_OFFSET)
98#define QSPI0_LUTKEY (QSPI0_REG_BASE + QSPI_LUTKEY_OFFSET)
99#define QSPI0_LCKCR (QSPI0_REG_BASE + QSPI_LCKCR_OFFSET)
100#define QSPI0_LUT0 (QSPI0_REG_BASE + QSPI_LUT0_OFFSET)
101#define QSPI0_LUT1 (QSPI0_REG_BASE + QSPI_LUT1_OFFSET)
102#define QSPI0_LUT2 (QSPI0_REG_BASE + QSPI_LUT2_OFFSET)
103#define QSPI0_LUT3 (QSPI0_REG_BASE + QSPI_LUT3_OFFSET)
104
105#define QSPI_SFACR_RESV (0x7fff << 17 | 0xfff << 4)
106
107#define QSPI_IPCR_SEQID_SHIFT 24
108#define QSPI_IPCR_SEQID_MASK (0xf << QSPI_IPCR_SEQID_SHIFT)
109#define QSPI_IPCR_RESV (0xf << 28 | 0x7f << 17)
110
111#define QSPI_FLSHCR_TDH_SHIFT 16
112#define QSPI_FLSHCR_TDH_MASK (0x3 << QSPI_FLSHCR_TDH_SHIFT)
113#define QSPI_FLSHCR_TDH_HALF_2X (0x1 << QSPI_FLSHCR_TDH_SHIFT)
114#define QSPI_FLSHCR_TDH_HALF_4X (0x2 << QSPI_FLSHCR_TDH_SHIFT)
115
116#define QSPI_MCR_END_CFD_SHIFT 2
117#define QSPI_MCR_END_CFD_MASK (3 << QSPI_MCR_END_CFD_SHIFT)
118#define QSPI_MCR_END_CFD_LE (3 << QSPI_MCR_END_CFD_SHIFT)
119#define QSPI_MCR_DQS_EN BIT6
120#define QSPI_MCR_DDR_EN BIT7
121#define QSPI_MCR_CLR_RXF BIT10
122#define QSPI_MCR_CLR_TXF BIT11
123#define QSPI_MCR_MDIS BIT14
124#define QSPI_MCR_DQS_LP_EN BIT25
125#define QSPI_MCR_DQS_INV_EN BIT26
126#define QSPI_MCR_ISDX_SHIFT 16
127#define QSPI_MCR_ISDX_MASK (0xf << QSPI_MCR_ISDX_SHIFT)
128#define QSPI_MCR_SWRSTHD BIT1
129#define QSPI_MCR_SWRSTSD BIT0
130#define QSPI_MCR_RESV (0xf << 20 | 0x3 << 12 | 0x3 << 8 | 0x1 << 4)
131
132#define QSPI_SMPR_HSENA BIT0
133#define QSPI_SMPR_FSPHS BIT5
134#define QSPI_SMPR_FSDLY BIT6
135#define QSPI_SMPR_DDRSMP_SHIFT 16
136#define QSPI_SMPR_DDRSMP_MASK (7 << QSPI_SMPR_DDRSMP_SHIFT)
137
138#define QSPI_BUFXCR_INVALID_MSTRID 0xe
139#define QSPI_BUF3CR_ALLMST BIT31
140#define QSPI_BUF3CR_ADATSZ_SHIFT 8
141#define QSPI_BUF3CR_ADATSZ_MASK (0xFF << QSPI_BUF3CR_ADATSZ_SHIFT)
142
143#define QSPI_BFGENCR_SEQID_SHIFT 12
144#define QSPI_BFGENCR_SEQID_MASK (0xf << QSPI_BFGENCR_SEQID_SHIFT)
145#define QSPI_BFGENCR_PAR_EN BIT16
146
147#define QSPI_SOCCR_DLINE_EN BIT8
148#define QSPI_DLACR_DLINE_CODE_SHIFT 0
149#define QSPI_DLACR_DLINE_CODE_MASK (0xFF << QSPI_DLACR_DLINE_CODE_SHIFT)
150#define QSPI_DLACR_DLINE_STEP_SHIFT 8
151#define QSPI_DLACR_DLINE_STEP_MASK (0xFF << QSPI_DLACR_DLINE_STEP_SHIFT)
152
153#define QSPI_RBSR_RDBFL_SHIFT 8
154#define QSPI_RBSR_RDBFL_MASK (0x3f << QSPI_RBSR_RDBFL_SHIFT)
155
156#define QSPI_RBCT_RXBRD BIT8
157#define QSPI_RBCT_WMRK_SHITT 0
158#define QSPI_RBCT_WMRK_MASK (0x1f << QSPI_RBCT_WMRK_SHITT)
159#define QSPI_RBCT_RESV (0x7fffff << 9 | 0x7 << 5)
160
161#define QSPI_TBCT_WMRK_SHITT 0
162#define QSPI_TBCT_WMRK_MASK (0x1f << QSPI_TBCT_WMRK_SHITT)
163#define QSPI_TBCT_RESV (~0x1f)
164
165#define QSPI_SR_TXFULL BIT27
166#define QSPI_SR_TXDMA BIT26
167#define QSPI_SR_TXWA BIT25
168#define QSPI_SR_TXEDA BIT24
169#define QSPI_SR_RXDMA BIT23
170#define QSPI_SR_RXFULL BIT19
171#define QSPI_SR_RXWE BIT16
172#define QSPI_SR_AHB_ACC BIT2
173#define QSPI_SR_IP_ACC BIT1
174#define QSPI_SR_BUSY BIT0
175
176#define QSPI_FR_DLPFF BIT31
177#define QSPI_FR_TBFF BIT27
178#define QSPI_FR_TBUF BIT26
179#define QSPI_FR_ILLINE BIT23
180#define QSPI_FR_RBOF BIT17
181#define QSPI_FR_RBDF BIT16
182#define QSPI_FR_ABSEF BIT15
183#define QSPI_FR_AITEF BIT14
184#define QSPI_FR_AIBSEF BIT13
185#define QSPI_FR_ABOF BIT12
186#define QSPI_FR_IUEF BIT11
187#define QSPI_FR_IPAEF BIT7
188#define QSPI_FR_IPIEF BIT6
189#define QSPI_FR_IPGEF BIT4
190#define QSPI_FR_TFF BIT0
191
192#define QSPI_RSER_DLPFIE BIT31
193#define QSPI_RSER_TBFIE BIT27
194#define QSPI_RSER_TBUIE BIT26
195#define QSPI_RSER_TBFDE BIT25
196#define QSPI_RSER_ILLINIE BIT23
197#define QSPI_RSER_RBDDE BIT21
198#define QSPI_RSER_RBOIE BIT17
199#define QSPI_RSER_RBDIE BIT16
200#define QSPI_RSER_ABSEIE BIT15
201#define QSPI_RSER_AITIE BIT14
202#define QSPI_RSER_AIBSIE BIT13
203#define QSPI_RSER_ABOIE BIT12
204#define QSPI_RSER_IUEIE BIT11
205#define QSPI_RSER_IPIEIE BIT6
206#define QSPI_RSER_IPGEIE BIT4
207#define QSPI_RSER_TFIE BIT0
208#define QSPI_RSER_RESV (0x7 << 28 | 0x1 << 24 | 0x1 << 22 | \
209 0x7 << 18 | 0x7 << 8 | 0x1 << 5 | \
210 0x7 << 1)
211
212#define QSPI_SPTRCLR_IPPTRC BIT8
213#define QSPI_SPTRCLR_RESV (0x7fffff << 9 | 0x7f << 1)
214
215#define QSPI_LCKCR_LOCK BIT0
216#define QSPI_LCKCR_UNLOCK BIT1
217
218#define LUT_KEY_VALUE 0x5af05af0
219
220// ---------------------------------------------------------------
221// Enumeration & Structure
222// ---------------------------------------------------------------
223enum QSPI_INST_E {
224 QSPI_INSTR_STOP = 0x0,
225 QSPI_INSTR_CMD = 0x1,
226 QSPI_INSTR_ADDR = 0x2,
227 QSPI_INSTR_DUMMY = 0x3,
228 QSPI_INSTR_MODE = 0x4,
229 QSPI_INSTR_MODE2 = 0x5,
230 QSPI_INSTR_MODE4 = 0x6,
231 QSPI_INSTR_READ = 0x7,
232 QSPI_INSTR_WRITE = 0x8,
233 QSPI_INSTR_JMP_ON_CS = 0x9,
234 QSPI_INSTR_ADDR_DDR = 0xA,
235 QSPI_INSTR_MODE_DDR = 0xB,
236 QSPI_INSTR_MODE2_DDR = 0xC,
237 QSPI_INSTR_MODE4_DDR = 0xD,
238 QSPI_INSTR_READ_DDR = 0xE,
239 QSPI_INSTR_WRITE_DDR = 0xF,
240 QSPI_INSTR_DATA_LEARN = 0x10,
241 QSPI_INSTR_CMD_DDR = 0x11,
242};
243
244enum QSPI_PAD_E {
245 QSPI_PAD_1X = 0x0,
246 QSPI_PAD_2X = 0x1,
247 QSPI_PAD_4X = 0x2,
248 QSPI_PAD_RSVD = 0x3
249};
250
251#define EIO 5 /* I/O error */
252#define EAGAIN 11 /* Try again */
253#define ENOMEM 12 /* Out of memory */
254#define ENODEV 19 /* No such device */
255#define EINVAL 22 /* Invalid argument */
256#define EBADMSG 74 /* Not a data message */
257#define ETIMEDOUT 110 /* Connection timed out */
258#define EUCLEAN 117 /* Chip needs cleaning */
259#define ENOTSUPP 524 /* Operation is not supported */
260
261#endif // QSPI_COMMON_H