master
h 95 lines 2.73 KB
Raw
1 /*
2 * QTest testcase for the M25P80 Flash (Using the Aspeed SPI
3 * Controller)
4 *
5 * Copyright (C) 2016 IBM Corp.
6 *
7 * SPDX-License-Identifier: MIT
8 */
9
10 #ifndef TESTS_ASPEED_SMC_UTILS_H
11 #define TESTS_ASPEED_SMC_UTILS_H
12
13 #include "qemu/bswap.h"
14 #include "libqtest-single.h"
15 #include "qemu/bitops.h"
16
17 /*
18 * ASPEED SPI Controller registers
19 */
20 #define R_CONF 0x00
21 #define CONF_ENABLE_W0 16
22 #define R_CE_CTRL 0x04
23 #define CRTL_EXTENDED0 0 /* 32 bit addressing for SPI */
24 #define R_CTRL0 0x10
25 #define CTRL_IO_QUAD_IO BIT(31)
26 #define CTRL_CE_STOP_ACTIVE BIT(2)
27 #define CTRL_READMODE 0x0
28 #define CTRL_FREADMODE 0x1
29 #define CTRL_WRITEMODE 0x2
30 #define CTRL_USERMODE 0x3
31 #define CTRL_IO_QUAD_DATA BIT(30)
32 #define CTRL_IO_DUAL_DATA BIT(29)
33 #define CTRL_DUMMY_LOW_SHIFT 6
34 #define CTRL_DUMMY_HIGH_SHIFT 14
35 #define SR_WEL BIT(1)
36 /* Data fifo */
37 #define R_DATA_FIFO 0x200
38
39 /*
40 * Flash commands
41 */
42 enum {
43 JEDEC_READ = 0x9f,
44 RDSR = 0x5,
45 WRDI = 0x4,
46 BULK_ERASE = 0xc7,
47 READ = 0x03,
48 FAST_READ = 0x0b,
49 DOR = 0x3b,
50 QOR = 0x6b,
51 PP = 0x02,
52 WRSR = 0x1,
53 WREN = 0x6,
54 SRWD = 0x80,
55 RESET_ENABLE = 0x66,
56 RESET_MEMORY = 0x99,
57 EN_4BYTE_ADDR = 0xB7,
58 ERASE_SECTOR = 0xd8,
59 };
60
61 #define CTRL_IO_MODE_MASK (BIT(31) | BIT(30) | BIT(29) | BIT(28))
62 #define FLASH_PAGE_SIZE 256
63
64 typedef struct AspeedSMCTestData {
65 QTestState *s;
66 uint64_t spi_base;
67 uint64_t flash_base;
68 uint32_t jedec_id;
69 char *tmp_path;
70 uint8_t cs;
71 const char *node;
72 uint32_t page_addr;
73 } AspeedSMCTestData;
74
75 void aspeed_smc_test_read_jedec(const void *data);
76 void aspeed_smc_test_erase_sector(const void *data);
77 void aspeed_smc_test_erase_all(const void *data);
78 void aspeed_smc_test_write_page(const void *data);
79 void aspeed_smc_test_read_page_mem(const void *data);
80 void aspeed_smc_test_write_page_mem(const void *data);
81 void aspeed_smc_test_read_status_reg(const void *data);
82 void aspeed_smc_test_status_reg_write_protection(const void *data);
83 void aspeed_smc_test_write_block_protect(const void *data);
84 void aspeed_smc_test_write_block_protect_bottom_bit(const void *data);
85 void aspeed_smc_test_write_page_qpi(const void *data);
86 void aspeed_smc_test_read_page_mem_fast_read(const void *data);
87 void aspeed_smc_test_write_page_fast_read(const void *data);
88 void aspeed_smc_test_read_page_mem_dor(const void *data);
89 void aspeed_smc_test_write_page_dor(const void *data);
90 void aspeed_smc_test_read_page_mem_qor(const void *data);
91 void aspeed_smc_test_write_page_qor(const void *data);
92 void aspeed_smc_test_write_page_datafifo(const void *data);
93 void aspeed_smc_test_read_page_datafifo(const void *data);
94
95 #endif /* TESTS_ASPEED_SMC_UTILS_H */