xref: /openbmc/qemu/hw/block/m25p80_sfdp.c (revision 1d809a7e)
1 /*
2  * M25P80 Serial Flash Discoverable Parameter (SFDP)
3  *
4  * Copyright (c) 2020, IBM Corporation.
5  *
6  * This code is licensed under the GPL version 2 or later. See the
7  * COPYING file in the top-level directory.
8  */
9 
10 #include "qemu/osdep.h"
11 #include "qemu/host-utils.h"
12 #include "m25p80_sfdp.h"
13 
14 #define define_sfdp_read(model)                                       \
15     uint8_t m25p80_sfdp_##model(uint32_t addr)                        \
16     {                                                                 \
17         assert(is_power_of_2(sizeof(sfdp_##model)));                  \
18         return sfdp_##model[addr & (sizeof(sfdp_##model) - 1)];       \
19     }
20 
21 /*
22  * Micron
23  */
24 static const uint8_t sfdp_n25q256a[] = {
25     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x00, 0xff,
26     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
27     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
28     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
29     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
30     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
31     0xe5, 0x20, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x0f,
32     0x29, 0xeb, 0x27, 0x6b, 0x08, 0x3b, 0x27, 0xbb,
33     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x27, 0xbb,
34     0xff, 0xff, 0x29, 0xeb, 0x0c, 0x20, 0x10, 0xd8,
35     0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
36     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
38     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
40     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
41     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
42     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
43     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
44     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
45     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
46     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
47     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
49     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
50     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
51     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
52     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
53     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
54     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
55     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
56     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
57 };
58 define_sfdp_read(n25q256a);
59 
60 
61 /*
62  * Matronix
63  */
64 
65 /* mx25l25635e. No 4B opcodes */
66 static const uint8_t sfdp_mx25l25635e[] = {
67     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x01, 0xff,
68     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
69     0xc2, 0x00, 0x01, 0x04, 0x60, 0x00, 0x00, 0xff,
70     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
71     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
72     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
73     0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
74     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
75     0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
76     0xff, 0xff, 0x00, 0xff, 0x0c, 0x20, 0x0f, 0x52,
77     0x10, 0xd8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
78     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
79     0x00, 0x36, 0x00, 0x27, 0xf7, 0x4f, 0xff, 0xff,
80     0xd9, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
81     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
82     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
83 };
84 define_sfdp_read(mx25l25635e)
85 
86 static const uint8_t sfdp_mx25l25635f[] = {
87     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x01, 0xff,
88     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
89     0xc2, 0x00, 0x01, 0x04, 0x60, 0x00, 0x00, 0xff,
90     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
91     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
92     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
93     0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
94     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
95     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
96     0xff, 0xff, 0x44, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
97     0x10, 0xd8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
98     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
99     0x00, 0x36, 0x00, 0x27, 0x9d, 0xf9, 0xc0, 0x64,
100     0x85, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
101     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
102     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
103     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
104     0xff, 0xff, 0xff, 0xff, 0xc2, 0xf5, 0x08, 0x0a,
105     0x08, 0x04, 0x03, 0x06, 0x00, 0x00, 0x07, 0x29,
106     0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
107     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
108     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
109     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
110     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
111     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
112     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
113     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
114     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
115     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
116     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
117     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
118     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
119     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
120     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
121     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
122     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
123     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
124     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
125     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
126     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
127     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
128     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
129     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
130     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
131     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
132     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
133     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
134     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
135     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
136     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
137     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
138     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
139     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
140     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
141     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
142     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
143     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
144     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
145     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
146     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
147     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
148     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
149     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
150     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
151 };
152 define_sfdp_read(mx25l25635f);
153