xref: /aosp_15_r20/external/flashrom/include/spi.h (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker /*
2*0d6140beSAndroid Build Coastguard Worker  * This file is part of the flashrom project.
3*0d6140beSAndroid Build Coastguard Worker  *
4*0d6140beSAndroid Build Coastguard Worker  * Copyright (C) 2007, 2008 Carl-Daniel Hailfinger
5*0d6140beSAndroid Build Coastguard Worker  *
6*0d6140beSAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or modify
7*0d6140beSAndroid Build Coastguard Worker  * it under the terms of the GNU General Public License as published by
8*0d6140beSAndroid Build Coastguard Worker  * the Free Software Foundation; version 2 of the License.
9*0d6140beSAndroid Build Coastguard Worker  *
10*0d6140beSAndroid Build Coastguard Worker  * This program is distributed in the hope that it will be useful,
11*0d6140beSAndroid Build Coastguard Worker  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*0d6140beSAndroid Build Coastguard Worker  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*0d6140beSAndroid Build Coastguard Worker  * GNU General Public License for more details.
14*0d6140beSAndroid Build Coastguard Worker  */
15*0d6140beSAndroid Build Coastguard Worker 
16*0d6140beSAndroid Build Coastguard Worker #ifndef __SPI_H__
17*0d6140beSAndroid Build Coastguard Worker #define __SPI_H__ 1
18*0d6140beSAndroid Build Coastguard Worker 
19*0d6140beSAndroid Build Coastguard Worker /*
20*0d6140beSAndroid Build Coastguard Worker  * Contains the generic SPI headers
21*0d6140beSAndroid Build Coastguard Worker  */
22*0d6140beSAndroid Build Coastguard Worker 
23*0d6140beSAndroid Build Coastguard Worker #define JEDEC_MAX_ADDR_LEN	0x04
24*0d6140beSAndroid Build Coastguard Worker 
25*0d6140beSAndroid Build Coastguard Worker /* Read Electronic ID */
26*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDID		0x9f
27*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDID_OUTSIZE	0x01
28*0d6140beSAndroid Build Coastguard Worker /* INSIZE may be 0x04 for some chips*/
29*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDID_INSIZE	0x03
30*0d6140beSAndroid Build Coastguard Worker 
31*0d6140beSAndroid Build Coastguard Worker /* Some ST M95X model */
32*0d6140beSAndroid Build Coastguard Worker #define ST_M95_RDID		0x83
33*0d6140beSAndroid Build Coastguard Worker #define ST_M95_RDID_3BA_OUTSIZE	0x04	/* 8b op, 24bit addr where size >64KiB */
34*0d6140beSAndroid Build Coastguard Worker #define ST_M95_RDID_2BA_OUTSIZE	0x03	/* 8b op, 16bit addr where size <=64KiB */
35*0d6140beSAndroid Build Coastguard Worker #define ST_M95_RDID_OUTSIZE_MAX 0x04	/* ST_M95_RDID_3BA_OUTSIZE */
36*0d6140beSAndroid Build Coastguard Worker #define ST_M95_RDID_INSIZE	0x03
37*0d6140beSAndroid Build Coastguard Worker 
38*0d6140beSAndroid Build Coastguard Worker /* Some Atmel AT25F* models have bit 3 as don't care bit in commands */
39*0d6140beSAndroid Build Coastguard Worker #define AT25F_RDID		0x15	/* 0x15 or 0x1d */
40*0d6140beSAndroid Build Coastguard Worker #define AT25F_RDID_OUTSIZE	0x01
41*0d6140beSAndroid Build Coastguard Worker #define AT25F_RDID_INSIZE	0x02
42*0d6140beSAndroid Build Coastguard Worker 
43*0d6140beSAndroid Build Coastguard Worker /* Read Electronic Manufacturer Signature */
44*0d6140beSAndroid Build Coastguard Worker #define JEDEC_REMS		0x90
45*0d6140beSAndroid Build Coastguard Worker #define JEDEC_REMS_OUTSIZE	0x04
46*0d6140beSAndroid Build Coastguard Worker #define JEDEC_REMS_INSIZE	0x02
47*0d6140beSAndroid Build Coastguard Worker 
48*0d6140beSAndroid Build Coastguard Worker /* Read Serial Flash Discoverable Parameters (SFDP) */
49*0d6140beSAndroid Build Coastguard Worker #define JEDEC_SFDP		0x5a
50*0d6140beSAndroid Build Coastguard Worker #define JEDEC_SFDP_OUTSIZE	0x05	/* 8b op, 24b addr, 8b dummy */
51*0d6140beSAndroid Build Coastguard Worker /*      JEDEC_SFDP_INSIZE : any length */
52*0d6140beSAndroid Build Coastguard Worker 
53*0d6140beSAndroid Build Coastguard Worker /* Read Electronic Signature */
54*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RES		0xab
55*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RES_OUTSIZE	0x04
56*0d6140beSAndroid Build Coastguard Worker /* INSIZE may be 0x02 for some chips*/
57*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RES_INSIZE	0x01
58*0d6140beSAndroid Build Coastguard Worker 
59*0d6140beSAndroid Build Coastguard Worker /* Write Enable */
60*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WREN		0x06
61*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WREN_OUTSIZE	0x01
62*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WREN_INSIZE	0x00
63*0d6140beSAndroid Build Coastguard Worker 
64*0d6140beSAndroid Build Coastguard Worker /* Write Disable */
65*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRDI		0x04
66*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRDI_OUTSIZE	0x01
67*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRDI_INSIZE	0x00
68*0d6140beSAndroid Build Coastguard Worker 
69*0d6140beSAndroid Build Coastguard Worker /* Chip Erase 0x60 is supported by Macronix/SST chips. */
70*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_60		0x60
71*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_60_OUTSIZE	0x01
72*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_60_INSIZE	0x00
73*0d6140beSAndroid Build Coastguard Worker 
74*0d6140beSAndroid Build Coastguard Worker /* Chip Erase 0x62 is supported by Atmel AT25F chips. */
75*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_62		0x62
76*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_62_OUTSIZE	0x01
77*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_62_INSIZE	0x00
78*0d6140beSAndroid Build Coastguard Worker 
79*0d6140beSAndroid Build Coastguard Worker /* Chip Erase 0xc7 is supported by SST/ST/EON/Macronix chips. */
80*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_C7		0xc7
81*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_C7_OUTSIZE	0x01
82*0d6140beSAndroid Build Coastguard Worker #define JEDEC_CE_C7_INSIZE	0x00
83*0d6140beSAndroid Build Coastguard Worker 
84*0d6140beSAndroid Build Coastguard Worker /* Block Erase 0x50 is supported by Atmel AT26DF chips. */
85*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_50		0x50
86*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_50_OUTSIZE	0x04
87*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_50_INSIZE	0x00
88*0d6140beSAndroid Build Coastguard Worker 
89*0d6140beSAndroid Build Coastguard Worker /* Block Erase 0x52 is supported by SST and old Atmel chips. */
90*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_52		0x52
91*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_52_OUTSIZE	0x04
92*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_52_INSIZE	0x00
93*0d6140beSAndroid Build Coastguard Worker 
94*0d6140beSAndroid Build Coastguard Worker /* Block Erase 0x81 is supported by Atmel AT26DF chips. */
95*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_81		0x81
96*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_81_OUTSIZE	0x04
97*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_81_INSIZE	0x00
98*0d6140beSAndroid Build Coastguard Worker 
99*0d6140beSAndroid Build Coastguard Worker /* Block Erase 0xc4 is supported by Micron chips. */
100*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_C4		0xc4
101*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_C4_OUTSIZE	0x04
102*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_C4_INSIZE	0x00
103*0d6140beSAndroid Build Coastguard Worker 
104*0d6140beSAndroid Build Coastguard Worker /* Block Erase 0xd8 is supported by EON/Macronix chips. */
105*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_D8		0xd8
106*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_D8_OUTSIZE	0x04
107*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_D8_INSIZE	0x00
108*0d6140beSAndroid Build Coastguard Worker 
109*0d6140beSAndroid Build Coastguard Worker /* Block Erase 0xd7 is supported by PMC chips. */
110*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_D7		0xd7
111*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_D7_OUTSIZE	0x04
112*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_D7_INSIZE	0x00
113*0d6140beSAndroid Build Coastguard Worker 
114*0d6140beSAndroid Build Coastguard Worker /* Block Erase 0xdc is supported by Spansion chips, takes 4 byte address */
115*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_DC		0xdc
116*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_DC_OUTSIZE	0x05
117*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BE_DC_INSIZE	0x00
118*0d6140beSAndroid Build Coastguard Worker 
119*0d6140beSAndroid Build Coastguard Worker /* Sector Erase 0x20 is supported by Macronix/SST chips. */
120*0d6140beSAndroid Build Coastguard Worker #define JEDEC_SE		0x20
121*0d6140beSAndroid Build Coastguard Worker #define JEDEC_SE_OUTSIZE	0x04
122*0d6140beSAndroid Build Coastguard Worker #define JEDEC_SE_INSIZE		0x00
123*0d6140beSAndroid Build Coastguard Worker 
124*0d6140beSAndroid Build Coastguard Worker /* Page Erase 0xDB */
125*0d6140beSAndroid Build Coastguard Worker #define JEDEC_PE		0xDB
126*0d6140beSAndroid Build Coastguard Worker #define JEDEC_PE_OUTSIZE	0x04
127*0d6140beSAndroid Build Coastguard Worker #define JEDEC_PE_INSIZE		0x00
128*0d6140beSAndroid Build Coastguard Worker 
129*0d6140beSAndroid Build Coastguard Worker /* Read Status Register */
130*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR		0x05
131*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR_OUTSIZE	0x01
132*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR_INSIZE	0x01
133*0d6140beSAndroid Build Coastguard Worker 
134*0d6140beSAndroid Build Coastguard Worker /* Read Status Register 2 */
135*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR2		0x35
136*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR2_OUTSIZE	0x01
137*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR2_INSIZE	0x01
138*0d6140beSAndroid Build Coastguard Worker 
139*0d6140beSAndroid Build Coastguard Worker /* Read Status Register 3 */
140*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR3		0x15
141*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR3_OUTSIZE	0x01
142*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSR3_INSIZE	0x01
143*0d6140beSAndroid Build Coastguard Worker 
144*0d6140beSAndroid Build Coastguard Worker /* Status Register Bits */
145*0d6140beSAndroid Build Coastguard Worker #define SPI_SR_WIP	(0x01 << 0)
146*0d6140beSAndroid Build Coastguard Worker #define SPI_SR_WEL	(0x01 << 1)
147*0d6140beSAndroid Build Coastguard Worker #define SPI_SR_ERA_ERR	(0x01 << 5)
148*0d6140beSAndroid Build Coastguard Worker #define SPI_SR_AAI	(0x01 << 6)
149*0d6140beSAndroid Build Coastguard Worker 
150*0d6140beSAndroid Build Coastguard Worker /* Write Status Enable */
151*0d6140beSAndroid Build Coastguard Worker #define JEDEC_EWSR		0x50
152*0d6140beSAndroid Build Coastguard Worker #define JEDEC_EWSR_OUTSIZE	0x01
153*0d6140beSAndroid Build Coastguard Worker #define JEDEC_EWSR_INSIZE	0x00
154*0d6140beSAndroid Build Coastguard Worker 
155*0d6140beSAndroid Build Coastguard Worker /* Write Status Register */
156*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR		0x01
157*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR_OUTSIZE	0x02
158*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR_INSIZE	0x00
159*0d6140beSAndroid Build Coastguard Worker 
160*0d6140beSAndroid Build Coastguard Worker /* Write Status Register 2 */
161*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR2		0x31
162*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR2_OUTSIZE	0x02
163*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR2_INSIZE	0x00
164*0d6140beSAndroid Build Coastguard Worker 
165*0d6140beSAndroid Build Coastguard Worker /* Write Status Register 3 */
166*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR3		0x11
167*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR3_OUTSIZE	0x02
168*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSR3_INSIZE	0x00
169*0d6140beSAndroid Build Coastguard Worker 
170*0d6140beSAndroid Build Coastguard Worker /* Read Security Register */
171*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSCUR		0x2b
172*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSCUR_OUTSIZE	0x01
173*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDSCUR_INSIZE	0x01
174*0d6140beSAndroid Build Coastguard Worker 
175*0d6140beSAndroid Build Coastguard Worker /* Write Security Register */
176*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSCUR		0x2f
177*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSCUR_OUTSIZE	0x01
178*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRSCUR_INSIZE	0x00
179*0d6140beSAndroid Build Coastguard Worker 
180*0d6140beSAndroid Build Coastguard Worker /* Read Configuration Register */
181*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDCR		0x15
182*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDCR_OUTSIZE	0x01
183*0d6140beSAndroid Build Coastguard Worker #define JEDEC_RDCR_INSIZE	0x01
184*0d6140beSAndroid Build Coastguard Worker 
185*0d6140beSAndroid Build Coastguard Worker /* Enter 4-byte Address Mode */
186*0d6140beSAndroid Build Coastguard Worker #define JEDEC_ENTER_4_BYTE_ADDR_MODE	0xB7
187*0d6140beSAndroid Build Coastguard Worker 
188*0d6140beSAndroid Build Coastguard Worker /* Exit 4-byte Address Mode */
189*0d6140beSAndroid Build Coastguard Worker #define JEDEC_EXIT_4_BYTE_ADDR_MODE	0xE9
190*0d6140beSAndroid Build Coastguard Worker 
191*0d6140beSAndroid Build Coastguard Worker /* Write Extended Address Register */
192*0d6140beSAndroid Build Coastguard Worker #define JEDEC_WRITE_EXT_ADDR_REG	0xC5
193*0d6140beSAndroid Build Coastguard Worker #define ALT_WRITE_EXT_ADDR_REG_17	0x17
194*0d6140beSAndroid Build Coastguard Worker 
195*0d6140beSAndroid Build Coastguard Worker /* Read Extended Address Register */
196*0d6140beSAndroid Build Coastguard Worker #define JEDEC_READ_EXT_ADDR_REG		0xC8
197*0d6140beSAndroid Build Coastguard Worker #define ALT_READ_EXT_ADDR_REG_16	0x16
198*0d6140beSAndroid Build Coastguard Worker 
199*0d6140beSAndroid Build Coastguard Worker /* Read the memory */
200*0d6140beSAndroid Build Coastguard Worker #define JEDEC_READ		0x03
201*0d6140beSAndroid Build Coastguard Worker #define JEDEC_READ_OUTSIZE	0x04
202*0d6140beSAndroid Build Coastguard Worker /*      JEDEC_READ_INSIZE : any length */
203*0d6140beSAndroid Build Coastguard Worker 
204*0d6140beSAndroid Build Coastguard Worker /* Read the memory (with delay after sending address) */
205*0d6140beSAndroid Build Coastguard Worker #define JEDEC_READ_FAST		0x0b
206*0d6140beSAndroid Build Coastguard Worker 
207*0d6140beSAndroid Build Coastguard Worker /* Write memory byte */
208*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BYTE_PROGRAM		0x02
209*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BYTE_PROGRAM_OUTSIZE	0x05
210*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BYTE_PROGRAM_INSIZE	0x00
211*0d6140beSAndroid Build Coastguard Worker 
212*0d6140beSAndroid Build Coastguard Worker /* Write AAI word (SST25VF080B) */
213*0d6140beSAndroid Build Coastguard Worker #define JEDEC_AAI_WORD_PROGRAM			0xad
214*0d6140beSAndroid Build Coastguard Worker #define JEDEC_AAI_WORD_PROGRAM_OUTSIZE		0x06
215*0d6140beSAndroid Build Coastguard Worker #define JEDEC_AAI_WORD_PROGRAM_CONT_OUTSIZE	0x03
216*0d6140beSAndroid Build Coastguard Worker #define JEDEC_AAI_WORD_PROGRAM_INSIZE		0x00
217*0d6140beSAndroid Build Coastguard Worker 
218*0d6140beSAndroid Build Coastguard Worker /* Read the memory with 4-byte address
219*0d6140beSAndroid Build Coastguard Worker    From ANY mode (3-bytes or 4-bytes) it works with 4-byte address */
220*0d6140beSAndroid Build Coastguard Worker #define JEDEC_READ_4BA		0x13
221*0d6140beSAndroid Build Coastguard Worker 
222*0d6140beSAndroid Build Coastguard Worker /* Read the memory with 4-byte address (and delay after sending address)
223*0d6140beSAndroid Build Coastguard Worker    From ANY mode (3-bytes or 4-bytes) it works with 4-byte address */
224*0d6140beSAndroid Build Coastguard Worker #define JEDEC_READ_4BA_FAST	0x0c
225*0d6140beSAndroid Build Coastguard Worker 
226*0d6140beSAndroid Build Coastguard Worker /* Write memory byte with 4-byte address
227*0d6140beSAndroid Build Coastguard Worker    From ANY mode (3-bytes or 4-bytes) it works with 4-byte address */
228*0d6140beSAndroid Build Coastguard Worker #define JEDEC_BYTE_PROGRAM_4BA	0x12
229*0d6140beSAndroid Build Coastguard Worker 
230*0d6140beSAndroid Build Coastguard Worker /* Error codes */
231*0d6140beSAndroid Build Coastguard Worker #define SPI_GENERIC_ERROR	-1
232*0d6140beSAndroid Build Coastguard Worker #define SPI_INVALID_OPCODE	-2
233*0d6140beSAndroid Build Coastguard Worker #define SPI_INVALID_ADDRESS	-3
234*0d6140beSAndroid Build Coastguard Worker #define SPI_INVALID_LENGTH	-4
235*0d6140beSAndroid Build Coastguard Worker #define SPI_FLASHROM_BUG	-5
236*0d6140beSAndroid Build Coastguard Worker #define SPI_PROGRAMMER_ERROR	-6
237*0d6140beSAndroid Build Coastguard Worker 
238*0d6140beSAndroid Build Coastguard Worker void clear_spi_id_cache(void);
239*0d6140beSAndroid Build Coastguard Worker 
240*0d6140beSAndroid Build Coastguard Worker #endif		/* !__SPI_H__ */
241