coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
w25q64.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <string.h>
4 #include <soc/spi.h>
5 
6 /*
7  * SPI lockdown configuration W25Q64FW.
8  */
9 #define SPI_OPMENU_0 0x01 /* WRSR: Write Status Register */
10 #define SPI_OPTYPE_0 0x01 /* Write, no address */
11 
12 #define SPI_OPMENU_1 0x02 /* BYPR: Byte Program */
13 #define SPI_OPTYPE_1 0x03 /* Write, address required */
14 
15 #define SPI_OPMENU_2 0x03 /* READ: Read Data */
16 #define SPI_OPTYPE_2 0x02 /* Read, address required */
17 
18 #define SPI_OPMENU_3 0x05 /* RDSR: Read Status Register */
19 #define SPI_OPTYPE_3 0x00 /* Read, no address */
20 
21 #define SPI_OPMENU_4 0x20 /* SE20: Sector Erase 0x20 */
22 #define SPI_OPTYPE_4 0x03 /* Write, address required */
23 
24 #define SPI_OPMENU_5 0x9f /* RDID: Read ID */
25 #define SPI_OPTYPE_5 0x00 /* Read, no address */
26 
27 #define SPI_OPMENU_6 0xd8 /* BED8: Block Erase 0xd8 */
28 #define SPI_OPTYPE_6 0x03 /* Write, address required */
29 
30 #define SPI_OPMENU_7 0x0b /* FAST: Fast Read */
31 #define SPI_OPTYPE_7 0x02 /* Read, address required */
32 
33 #define SPI_OPPREFIX ((0x50 << 8) | 0x06) /* EWSR and WREN */
34 #define SPI_OPTYPE ((SPI_OPTYPE_7 << 14) | (SPI_OPTYPE_6 << 12) | \
35  (SPI_OPTYPE_5 << 10) | (SPI_OPTYPE_4 << 8) | \
36  (SPI_OPTYPE_3 << 6) | (SPI_OPTYPE_2 << 4) | \
37  (SPI_OPTYPE_1 << 2) | (SPI_OPTYPE_0 << 0))
38 #define SPI_OPMENU_UPPER ((SPI_OPMENU_7 << 24) | (SPI_OPMENU_6 << 16) | \
39  (SPI_OPMENU_5 << 8) | (SPI_OPMENU_4 << 0))
40 #define SPI_OPMENU_LOWER ((SPI_OPMENU_3 << 24) | (SPI_OPMENU_2 << 16) | \
41  (SPI_OPMENU_1 << 8) | (SPI_OPMENU_0 << 0))
42 #define SPI_VSCC (WG_64_BYTE | EO(0x20) | BES_4_KB)
43 
44 static const struct spi_config spi_config = {
46  .optype = SPI_OPTYPE,
47  .opmenu = { SPI_OPMENU_LOWER, SPI_OPMENU_UPPER },
48  .lvscc = SPI_VSCC,
49  .uvscc = SPI_VSCC,
50 };
51 
53 {
54  memcpy(cfg, &spi_config, sizeof(*cfg));
55 
56  return 0;
57 }
void * memcpy(void *dest, const void *src, size_t n)
Definition: memcpy.c:7
#define SPI_OPMENU_LOWER
Definition: w25q64.c:40
int mainboard_get_spi_config(struct spi_config *cfg)
Definition: w25q64.c:52
#define SPI_OPTYPE
Definition: w25q64.c:34
#define SPI_OPPREFIX
Definition: w25q64.c:33
#define SPI_VSCC
Definition: w25q64.c:42
#define SPI_OPMENU_UPPER
Definition: w25q64.c:38
Definition: spi.h:77
uint16_t preop
Definition: spi.h:40