]> git.proxmox.com Git - mirror_edk2.git/blame - Vlv2TbltDevicePkg/Include/Library/SpiFlash.H
Vlv2TbltDevicePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / Vlv2TbltDevicePkg / Include / Library / SpiFlash.H
CommitLineData
3cbfba02
DW
1/*++\r
2\r
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>\r
4 \r\r
9dc8036d
MK
5 SPDX-License-Identifier: BSD-2-Clause-Patent\r
6\r
3cbfba02
DW
7 \r\r
8**/\r
9\r
10#ifndef _SPIFlash_H_\r
11#define _SPIFlash_H_\r
12\r
13#include <Protocol/Spi.h>\r
14\r
15//EFI_STATUS SpiFlashLock(BOOLEAN Lock);\r
16//EFI_STATUS SpiFlashInit(void);\r
17\r
18typedef enum {\r
19 EnumSpiFlashW25Q64,\r
20 EnumSpiFlashAT25DF321A,\r
21 EnumSpiFlashAT26DF321,\r
22 EnumSpiFlashAT25DF641,\r
23 EnumSpiFlashW25Q16,\r
24 EnumSpiFlashW25Q32,\r
25 EnumSpiFlashW25X32,\r
26 EnumSpiFlashW25X64,\r
27 EnumSpiFlashW25Q128,\r
28 EnumSpiFlashMX25L16,\r
29 EnumSpiFlashMX25L32,\r
30 EnumSpiFlashMX25L64,\r
31 EnumSpiFlashMX25L128,\r
32 EnumSpiFlashMX25U6435F,\r
33 EnumSpiFlashSST25VF016B,\r
34 EnumSpiFlashSST25VF064C,\r
35 EnumSpiFlashN25Q064,\r
36 EnumSpiFlashM25PX16,\r
37 EnumSpiFlashN25Q032,\r
38 EnumSpiFlashM25PX32,\r
39 EnumSpiFlashM25PX64,\r
40 EnumSpiFlashN25Q128,\r
41 EnumSpiFlashEN25Q16,\r
42 EnumSpiFlashEN25Q32,\r
43 EnumSpiFlashEN25Q64,\r
44 EnumSpiFlashEN25Q128,\r
45 EnumSpiFlashA25L016,\r
46 EnumSpiFlashMax\r
47} SPI_FLASH_TYPES_SUPPORTED;\r
48\r
49//\r
50// Serial Flash VendorId and DeviceId\r
51//\r
52#define SF_VENDOR_ID_ATMEL 0x1F\r
53#define SF_DEVICE_ID0_AT26DF321 0x47\r
54#define SF_DEVICE_ID1_AT26DF321 0x00\r
55#define SF_DEVICE_ID0_AT25DF321A 0x47\r
56#define SF_DEVICE_ID1_AT25DF321A 0x01\r
57#define SF_DEVICE_ID0_AT25DF641 0x48\r
58#define SF_DEVICE_ID1_AT25DF641 0x00\r
59\r
60#define SF_VENDOR_ID_WINBOND 0xEF\r
61#define SF_DEVICE_ID0_W25XXX 0x30\r
62#define SF_DEVICE_ID1_W25X32 0x16\r
63#define SF_DEVICE_ID1_W25X64 0x17\r
6f2ef18e 64#define SF_DEVICE_ID0_W25QXX 0x40\r
3cbfba02
DW
65#define SF_DEVICE_ID1_W25Q16 0x15\r
66#define SF_DEVICE_ID1_W25Q32 0x16\r
67#define SF_DEVICE_ID1_W25Q64 0x17\r
68#define SF_DEVICE_ID1_W25Q128 0x18\r
69\r
70#define SF_VENDOR_ID_MACRONIX 0xC2\r
71#define SF_DEVICE_ID0_MX25LXX 0x20\r
72#define SF_DEVICE_ID1_MX25L16 0x15\r
73#define SF_DEVICE_ID1_MX25L32 0x16\r
74#define SF_DEVICE_ID1_MX25L64 0x17\r
75#define SF_DEVICE_ID1_MX25L128 0x18\r
76#define SF_DEVICE_ID0_MX25UXX 0x25\r
77#define SF_DEVICE_ID1_MX25U6435F 0x37\r
78\r
79#define SF_VENDOR_ID_NUMONYX 0x20\r
80#define SF_DEVICE_ID0_N25Q064 0xBB\r
81#define SF_DEVICE_ID1_N25Q064 0x17\r
82#define SF_DEVICE_ID0_M25PXXX 0x71\r
83#define SF_DEVICE_ID0_N25QXXX 0xBA\r
84#define SF_DEVICE_ID1_M25PX16 0x15\r
85#define SF_DEVICE_ID1_N25Q032 0x16\r
86#define SF_DEVICE_ID1_M25PX32 0x16\r
87#define SF_DEVICE_ID1_M25PX64 0x17\r
88#define SF_DEVICE_ID1_N25Q128 0x18\r
89\r
90#define SF_VENDOR_ID_SST 0xBF\r
91#define SF_DEVICE_ID0_SST25VF0XXX 0x25\r
92#define SF_DEVICE_ID1_SST25VF016B 0x41\r
93#define SF_DEVICE_ID1_SST25VF064C 0x4B\r
94\r
95#define SF_VENDOR_ID_EON 0x1C\r
96#define SF_DEVICE_ID0_EN25QXX 0x30\r
97#define SF_DEVICE_ID1_EN25Q16 0x15\r
98#define SF_DEVICE_ID1_EN25Q32 0x16\r
99#define SF_DEVICE_ID1_EN25Q64 0x17\r
100#define SF_DEVICE_ID1_EN25Q128 0x18\r
101\r
102#define SF_VENDOR_ID_AMIC 0x37\r
103#define SF_DEVICE_ID0_A25L016 0x30\r
104#define SF_DEVICE_ID1_A25L016 0x15\r
105\r
106#define ATMEL_AT26DF321_SIZE 0x00400000\r
107#define ATMEL_AT25DF321A_SIZE 0x00400000\r
108#define ATMEL_AT25DF641_SIZE 0x00800000\r
109#define WINBOND_W25X32_SIZE 0x00400000\r
110#define WINBOND_W25X64_SIZE 0x00800000\r
111#define WINBOND_W25Q16_SIZE 0x00200000\r
112#define WINBOND_W25Q32_SIZE 0x00400000\r
113#define WINBOND_W25Q64_SIZE 0x00800000\r
114#define WINBOND_W25Q128_SIZE 0x01000000\r
115#define SST_SST25VF016B_SIZE 0x00200000\r
116#define SST_SST25VF064C_SIZE 0x00800000\r
117#define MACRONIX_MX25L16_SIZE 0x00200000\r
118#define MACRONIX_MX25L32_SIZE 0x00400000\r
119#define MACRONIX_MX25L64_SIZE 0x00800000\r
120#define MACRONIX_MX25U64_SIZE 0x00800000\r
121#define MACRONIX_MX25L128_SIZE 0x01000000\r
122#define NUMONYX_M25PX16_SIZE 0x00400000\r
123#define NUMONYX_N25Q032_SIZE 0x00400000\r
124#define NUMONYX_M25PX32_SIZE 0x00400000\r
125#define NUMONYX_M25PX64_SIZE 0x00800000\r
126#define NUMONYX_N25Q064_SIZE 0x00800000\r
127#define NUMONYX_N25Q128_SIZE 0x01000000\r
128#define EON_EN25Q16_SIZE 0x00200000\r
129#define EON_EN25Q32_SIZE 0x00400000\r
130#define EON_EN25Q64_SIZE 0x00800000\r
131#define EON_EN25Q128_SIZE 0x01000000\r
132#define AMIC_A25L16_SIZE 0x00200000\r
133\r
134#define SF_VENDOR_ID_SST 0xBF\r
135#define SF_DEVICE_ID0_25LF080A 0x25\r
136#define SF_DEVICE_ID1_25LF080A 0x8E\r
137#define SF_DEVICE_ID0_25VF016B 0x25\r
138#define SF_DEVICE_ID1_25VF016B 0x41\r
139\r
140#define SF_VENDOR_ID_ATMEL 0x1F\r
141#define SF_DEVICE_ID0_AT26DF321 0x47\r
142#define SF_DEVICE_ID1_AT26DF321 0x00\r
143\r
144#define SF_VENDOR_ID_STM 0x20\r
145#define SF_DEVICE_ID0_M25P32 0x20\r
146#define SF_DEVICE_ID1_M25P32 0x16\r
147\r
148#define SF_VENDOR_ID_WINBOND 0xEF\r
149#define SF_DEVICE_ID0_W25XXX 0x30\r
6f2ef18e 150\r
3cbfba02
DW
151#define SF_DEVICE_ID1_W25X80 0x14\r
152#define SF_DEVICE_ID1_W25X16 0x15\r
153#define SF_DEVICE_ID1_W25X32 0x16\r
154#define SF_DEVICE_ID1_W25X64 0x17\r
155\r
156#define SF_VENDOR_ID_MX 0xC2\r
157#define SF_DEVICE_ID0_25L1605A 0x20\r
158#define SF_DEVICE_ID1_25L1605A 0x15\r
159\r
160#define SF_VENDOR_ID_NUMONYX 0x20\r
161#define SF_DEVICE_ID0_M25PX16 0x71\r
162#define SF_DEVICE_ID1_M25PX16 0x15\r
163\r
164#define SST_25LF080A_SIZE 0x00100000\r
165#define SST_25LF016B_SIZE 0x00200000\r
166#define ATMEL_AT26DF321_SIZE 0x00400000\r
167#define STM_M25P32_SIZE 0x00400000\r
168#define WINBOND_W25X80_SIZE 0x00100000\r
169#define WINBOND_W25X16_SIZE 0x00200000\r
170#define WINBOND_W25X32_SIZE 0x00400000\r
171#define WINBOND_W25X64_SIZE 0x00800000\r
172#define MX_25L1605A_SIZE 0x00200000\r
173\r
174//\r
175// Physical Sector Size on the Serial Flash device\r
176//\r
177#define SF_SECTOR_SIZE 0x1000\r
178#define SF_BLOCK_SIZE 0x8000\r
179\r
180//\r
181// Serial Flash Status Register definitions\r
182//\r
183#define SF_SR_BUSY 0x01 // Indicates if internal write operation is in progress\r
184#define SF_SR_WEL 0x02 // Indicates if device is memory write enabled\r
185#define SF_SR_BP0 0x04 // Block protection bit 0\r
186#define SF_SR_BP1 0x08 // Block protection bit 1\r
187#define SF_SR_BP2 0x10 // Block protection bit 2\r
188#define SF_SR_BP3 0x20 // Block protection bit 3\r
189#define SF_SR_WPE 0x3C // Enable write protection on all blocks\r
190#define SF_SR_AAI 0x40 // Auto Address Increment Programming status\r
191#define SF_SR_BPL 0x80 // Block protection lock-down\r
192\r
193//\r
194// Operation Instruction definitions for the Serial Flash Device\r
195//\r
196#define SF_INST_WRSR 0x01 // Write Status Register\r
197#define SF_INST_PROG 0x02 // Byte Program\r
198#define SF_INST_READ 0x03 // Read\r
199#define SF_INST_WRDI 0x04 // Write Disable\r
200#define SF_INST_RDSR 0x05 // Read Status Register\r
201#define SF_INST_WREN 0x06 // Write Enable\r
202#define SF_INST_HS_READ 0x0B // High-speed Read\r
203#define SF_INST_SERASE 0x20 // Sector Erase (4KB)\r
204#define SF_INST_BERASE 0x52 // Block Erase (32KB)\r
205#define SF_INST_64KB_ERASE 0xD8 // Block Erase (64KB)\r
206#define SF_INST_EWSR 0x50 // Enable Write Status Register\r
207#define SF_INST_READ_ID 0xAB // Read ID\r
208#define SF_INST_JEDEC_READ_ID 0x9F // JEDEC Read ID\r
209#define SF_INST_DOFR 0x3B // Dual Output Fast Read\r
210#define SF_INST_SFDP 0x5A // Serial Flash Discovery Parameters\r
211\r
212#define SECTOR_SIZE_4KB 0x1000 // Common 4kBytes sector size\r
213#define SECTOR_SIZE_64KB 0x10000 // Common 64kBytes sector size\r
214#define BLOCK_SIZE_64KB 0x00010000 // Common 64kBytes block size\r
215#define MAX_FWH_SIZE 0x00100000 // 8Mbit (Note that this can also be used for the 4Mbit )\r
216\r
217//\r
218// Prefix Opcode Index on the host SPI controller\r
219//\r
220typedef enum {\r
221 SPI_WREN, // Prefix Opcode 0: Write Enable\r
222 SPI_EWSR, // Prefix Opcode 1: Enable Write Status Register\r
223} PREFIX_OPCODE_INDEX;\r
224\r
225//\r
226// Opcode Menu Index on the host SPI controller\r
227//\r
228typedef enum {\r
229 SPI_READ_ID, // Opcode 0: READ ID, Read cycle with address\r
230 SPI_READ, // Opcode 1: READ, Read cycle with address\r
231 SPI_RDSR, // Opcode 2: Read Status Register, No address\r
232 SPI_WRDI_SFDP, // Opcode 3: Write Disable or Discovery Parameters, No address\r
233 SPI_SERASE, // Opcode 4: Sector Erase (4KB), Write cycle with address\r
234 SPI_BERASE, // Opcode 5: Block Erase (32KB), Write cycle with address\r
235 SPI_PROG, // Opcode 6: Byte Program, Write cycle with address\r
236 SPI_WRSR, // Opcode 7: Write Status Register, No address\r
237} SPI_OPCODE_INDEX;\r
238\r
239#endif\r