xref: /openbmc/qemu/hw/block/m25p80_sfdp.c (revision feb58e3b)
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 static const uint8_t sfdp_mt35xu01g[] = {
61     0x53, 0x46, 0x44, 0x50, 0x06, 0x01, 0x01, 0xff,
62     0x00, 0x06, 0x01, 0x10, 0x30, 0x00, 0x00, 0xff,
63     0x84, 0x00, 0x01, 0x02, 0x80, 0x00, 0x00, 0xff,
64     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
65     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
66     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
67     0xe5, 0x20, 0x8a, 0xff, 0xff, 0xff, 0xff, 0x3f,
68     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
69     0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
70     0xff, 0xff, 0x00, 0x00, 0x0c, 0x20, 0x11, 0xd8,
71     0x0f, 0x52, 0x00, 0x00, 0x24, 0x5a, 0x99, 0x00,
72     0x8b, 0x8e, 0x03, 0xe1, 0xac, 0x01, 0x27, 0x38,
73     0x7a, 0x75, 0x7a, 0x75, 0xfb, 0xbd, 0xd5, 0x5c,
74     0x00, 0x00, 0x70, 0xff, 0x81, 0xb0, 0x38, 0x36,
75     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
76     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
77     0x43, 0x0e, 0xff, 0xff, 0x21, 0xdc, 0x5c, 0xff,
78     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
79     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
80     0xff, 0xff, 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     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
84     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
85     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
86     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
87     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
89     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 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 };
94 
95 define_sfdp_read(mt35xu01g);
96 
97 static const uint8_t sfdp_mt35xu02g[] = {
98     0x53, 0x46, 0x44, 0x50, 0x06, 0x01, 0x01, 0xff,
99     0x00, 0x06, 0x01, 0x10, 0x30, 0x00, 0x00, 0xff,
100     0x84, 0x00, 0x01, 0x02, 0x80, 0x00, 0x00, 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     0xe5, 0x20, 0x8a, 0xff, 0xff, 0xff, 0xff, 0x7f,
105     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106     0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
107     0xff, 0xff, 0x00, 0x00, 0x0c, 0x20, 0x11, 0xd8,
108     0x0f, 0x52, 0x00, 0x00, 0x24, 0x5a, 0x99, 0x00,
109     0x8b, 0x8e, 0x03, 0xe1, 0xac, 0x01, 0x27, 0x38,
110     0x7a, 0x75, 0x7a, 0x75, 0xfb, 0xbd, 0xd5, 0x5c,
111     0x00, 0x00, 0x70, 0xff, 0x81, 0xb0, 0x38, 0x36,
112     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
113     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
114     0x43, 0x0e, 0xff, 0xff, 0x21, 0xdc, 0x5c, 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 };
131 
132 define_sfdp_read(mt35xu02g);
133 
134 /*
135  * Matronix
136  */
137 
138 /* mx25l25635e. No 4B opcodes */
139 static const uint8_t sfdp_mx25l25635e[] = {
140     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x01, 0xff,
141     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
142     0xc2, 0x00, 0x01, 0x04, 0x60, 0x00, 0x00, 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     0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
147     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
148     0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
149     0xff, 0xff, 0x00, 0xff, 0x0c, 0x20, 0x0f, 0x52,
150     0x10, 0xd8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
151     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
152     0x00, 0x36, 0x00, 0x27, 0xf7, 0x4f, 0xff, 0xff,
153     0xd9, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
154     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
155     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
156 };
157 define_sfdp_read(mx25l25635e)
158 
159 static const uint8_t sfdp_mx25l25635f[] = {
160     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x01, 0xff,
161     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
162     0xc2, 0x00, 0x01, 0x04, 0x60, 0x00, 0x00, 0xff,
163     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
164     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
165     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
166     0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
167     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
168     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
169     0xff, 0xff, 0x44, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
170     0x10, 0xd8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
171     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
172     0x00, 0x36, 0x00, 0x27, 0x9d, 0xf9, 0xc0, 0x64,
173     0x85, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
174     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
175     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
176     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
177     0xff, 0xff, 0xff, 0xff, 0xc2, 0xf5, 0x08, 0x0a,
178     0x08, 0x04, 0x03, 0x06, 0x00, 0x00, 0x07, 0x29,
179     0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
180     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
181     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
182     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
183     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
184     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
185     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
186     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
187     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
188     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
189     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
190     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
191     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
192     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
193     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
194     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
195     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
196     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
197     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
198     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
199     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
200     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
201     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
202     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
203     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
204     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
205     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
206     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
207     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
208     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
209     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
210     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
211     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
212     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
213     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
214     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
215     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
216     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
217     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
218     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
219     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
220     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
221     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
222     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
223     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
224 };
225 define_sfdp_read(mx25l25635f);
226 
227 static const uint8_t sfdp_mx66l1g45g[] = {
228     0x53, 0x46, 0x44, 0x50, 0x06, 0x01, 0x02, 0xff,
229     0x00, 0x06, 0x01, 0x10, 0x30, 0x00, 0x00, 0xff,
230     0xc2, 0x00, 0x01, 0x04, 0x10, 0x01, 0x00, 0xff,
231     0x84, 0x00, 0x01, 0x02, 0xc0, 0x00, 0x00, 0xff,
232     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
233     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
234     0xe5, 0x20, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x3f,
235     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
236     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
237     0xff, 0xff, 0x44, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
238     0x10, 0xd8, 0x00, 0xff, 0xd6, 0x49, 0xc5, 0x00,
239     0x85, 0xdf, 0x04, 0xe3, 0x44, 0x03, 0x67, 0x38,
240     0x30, 0xb0, 0x30, 0xb0, 0xf7, 0xbd, 0xd5, 0x5c,
241     0x4a, 0x9e, 0x29, 0xff, 0xf0, 0x50, 0xf9, 0x85,
242     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
243     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
244     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
245     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
246     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
247     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
248     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
249     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
250     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
251     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
252     0x7f, 0xef, 0xff, 0xff, 0x21, 0x5c, 0xdc, 0xff,
253     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
254     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
255     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
256     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
257     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
258     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
259     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
260     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
261     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
262     0x00, 0x36, 0x00, 0x27, 0x9d, 0xf9, 0xc0, 0x64,
263     0x85, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
264     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
265     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
266     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
267     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
268     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
269     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
270     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
271     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
272     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
273     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
274     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
275     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
276     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
277     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
278     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
279     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
280     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
281     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
282     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
283     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
284     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
285     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
286     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
287     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
288     0xc2, 0xf5, 0x08, 0x00, 0x0c, 0x04, 0x08, 0x08,
289     0x01, 0x00, 0x19, 0x0f, 0x01, 0x01, 0x06, 0xff,
290     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
291     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
292 };
293 define_sfdp_read(mx66l1g45g);
294 
295 /*
296  * Windbond
297  */
298 
299 static const uint8_t sfdp_w25q256[] = {
300     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x00, 0xff,
301     0x00, 0x00, 0x01, 0x09, 0x80, 0x00, 0x00, 0xff,
302     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
303     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
304     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
305     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
306     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
307     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
308     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
309     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
310     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
311     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
312     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
313     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
314     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
315     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
316     0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
317     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x42, 0xbb,
318     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
319     0xff, 0xff, 0x21, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
320     0x10, 0xd8, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
321     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
322     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
323     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
324     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
325     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
326     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
327     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
328     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
329     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
330     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
331     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
332 };
333 define_sfdp_read(w25q256);
334 
335 static const uint8_t sfdp_w25q512jv[] = {
336     0x53, 0x46, 0x44, 0x50, 0x06, 0x01, 0x01, 0xff,
337     0x00, 0x06, 0x01, 0x10, 0x80, 0x00, 0x00, 0xff,
338     0x84, 0x00, 0x01, 0x02, 0xd0, 0x00, 0x00, 0xff,
339     0x03, 0x00, 0x01, 0x02, 0xf0, 0x00, 0x00, 0xff,
340     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
341     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
342     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
343     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
344     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
345     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
346     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
347     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
348     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
349     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
350     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
351     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
352     0xe5, 0x20, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x1f,
353     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x42, 0xbb,
354     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
355     0xff, 0xff, 0x40, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
356     0x10, 0xd8, 0x00, 0x00, 0x36, 0x02, 0xa6, 0x00,
357     0x82, 0xea, 0x14, 0xe2, 0xe9, 0x63, 0x76, 0x33,
358     0x7a, 0x75, 0x7a, 0x75, 0xf7, 0xa2, 0xd5, 0x5c,
359     0x19, 0xf7, 0x4d, 0xff, 0xe9, 0x70, 0xf9, 0xa5,
360     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
361     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
362     0xff, 0x0a, 0xf0, 0xff, 0x21, 0xff, 0xdc, 0xff,
363     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
364     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
365     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
366     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
367     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
368 };
369 define_sfdp_read(w25q512jv);
370 
371 static const uint8_t sfdp_w25q01jvq[] = {
372     0x53, 0x46, 0x44, 0x50, 0x06, 0x01, 0x01, 0xff,
373     0x00, 0x06, 0x01, 0x10, 0x80, 0x00, 0x00, 0xff,
374     0x84, 0x00, 0x01, 0x02, 0xd0, 0x00, 0x00, 0xff,
375     0x03, 0x00, 0x01, 0x02, 0xf0, 0x00, 0x00, 0xff,
376     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
377     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
378     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
379     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
380     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
381     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
382     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
383     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
384     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
385     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
386     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
387     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
388     0xe5, 0x20, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x3f,
389     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x42, 0xbb,
390     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
391     0xff, 0xff, 0x40, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
392     0x10, 0xd8, 0x00, 0x00, 0x36, 0x02, 0xa6, 0x00,
393     0x82, 0xea, 0x14, 0xe2, 0xe9, 0x63, 0x76, 0x33,
394     0x7a, 0x75, 0x7a, 0x75, 0xf7, 0xa2, 0xd5, 0x5c,
395     0x19, 0xf7, 0x4d, 0xff, 0xe9, 0x70, 0xf9, 0xa5,
396     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
397     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
398     0xff, 0x0a, 0xf0, 0xff, 0x21, 0xff, 0xdc, 0xff,
399     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
400     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
401     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
402     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
403     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
404 };
405 define_sfdp_read(w25q01jvq);
406 
407 static const uint8_t sfdp_w25q80bl[] = {
408     0x53, 0x46, 0x44, 0x50, 0x05, 0x01, 0x00, 0xff,
409     0x00, 0x05, 0x01, 0x10, 0x80, 0x00, 0x00, 0xff,
410     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
411     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
412     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
413     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
414     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
415     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
416     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
417     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
418     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
419     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
420     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
421     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
422     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
423     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
424     0xe5, 0x20, 0xf1, 0xff, 0xff, 0xff, 0x7f, 0x00,
425     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x42, 0xbb,
426     0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
427     0xff, 0xff, 0x00, 0x00, 0x0c, 0x20, 0x0f, 0x52,
428     0x10, 0xd8, 0x00, 0x00, 0x23, 0x02, 0xa6, 0x00,
429     0x81, 0x6c, 0x14, 0xa7, 0xed, 0x61, 0x76, 0x33,
430     0x7a, 0x75, 0x7a, 0x75, 0xf7, 0xa2, 0xd5, 0x5c,
431     0x00, 0xf7, 0x1d, 0xff, 0xe9, 0x30, 0xc0, 0x80,
432     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
433     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
434     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
435     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
436     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
437     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
438     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
439     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
440 };
441 define_sfdp_read(w25q80bl);
442 
443 /*
444  * Integrated Silicon Solution (ISSI)
445  */
446 
447 static const uint8_t sfdp_is25wp256[] = {
448     0x53, 0x46, 0x44, 0x50, 0x06, 0x01, 0x01, 0xff,
449     0x00, 0x06, 0x01, 0x10, 0x30, 0x00, 0x00, 0xff,
450     0x9d, 0x05, 0x01, 0x03, 0x80, 0x00, 0x00, 0x02,
451     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
452     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
453     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
454     0xe5, 0x20, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x0f,
455     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x80, 0xbb,
456     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
457     0xff, 0xff, 0x44, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
458     0x10, 0xd8, 0x00, 0xff, 0x23, 0x4a, 0xc9, 0x00,
459     0x82, 0xd8, 0x11, 0xce, 0xcc, 0xcd, 0x68, 0x46,
460     0x7a, 0x75, 0x7a, 0x75, 0xf7, 0xae, 0xd5, 0x5c,
461     0x4a, 0x42, 0x2c, 0xff, 0xf0, 0x30, 0xfa, 0xa9,
462     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
463     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
464     0x50, 0x19, 0x50, 0x16, 0x9f, 0xf9, 0xc0, 0x64,
465     0x8f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
466     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
467     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
468     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
469     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
470     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
471     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
472     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
473     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
474     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
475     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
476     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
477     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
478     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
479     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
480 };
481 define_sfdp_read(is25wp256);
482