xref: /openbmc/qemu/hw/block/m25p80_sfdp.c (revision 51f4613d)
15eb24fbdSCédric Le Goater /*
25eb24fbdSCédric Le Goater  * M25P80 Serial Flash Discoverable Parameter (SFDP)
35eb24fbdSCédric Le Goater  *
45eb24fbdSCédric Le Goater  * Copyright (c) 2020, IBM Corporation.
55eb24fbdSCédric Le Goater  *
65eb24fbdSCédric Le Goater  * This code is licensed under the GPL version 2 or later. See the
75eb24fbdSCédric Le Goater  * COPYING file in the top-level directory.
85eb24fbdSCédric Le Goater  */
95eb24fbdSCédric Le Goater 
105eb24fbdSCédric Le Goater #include "qemu/osdep.h"
115eb24fbdSCédric Le Goater #include "qemu/host-utils.h"
125eb24fbdSCédric Le Goater #include "m25p80_sfdp.h"
135eb24fbdSCédric Le Goater 
145eb24fbdSCédric Le Goater #define define_sfdp_read(model)                                       \
155eb24fbdSCédric Le Goater     uint8_t m25p80_sfdp_##model(uint32_t addr)                        \
165eb24fbdSCédric Le Goater     {                                                                 \
175eb24fbdSCédric Le Goater         assert(is_power_of_2(sizeof(sfdp_##model)));                  \
185eb24fbdSCédric Le Goater         return sfdp_##model[addr & (sizeof(sfdp_##model) - 1)];       \
195eb24fbdSCédric Le Goater     }
205eb24fbdSCédric Le Goater 
215eb24fbdSCédric Le Goater /*
225eb24fbdSCédric Le Goater  * Micron
235eb24fbdSCédric Le Goater  */
245eb24fbdSCédric Le Goater static const uint8_t sfdp_n25q256a[] = {
255eb24fbdSCédric Le Goater     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x00, 0xff,
265eb24fbdSCédric Le Goater     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
275eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
285eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
295eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
305eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
315eb24fbdSCédric Le Goater     0xe5, 0x20, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x0f,
325eb24fbdSCédric Le Goater     0x29, 0xeb, 0x27, 0x6b, 0x08, 0x3b, 0x27, 0xbb,
335eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x27, 0xbb,
345eb24fbdSCédric Le Goater     0xff, 0xff, 0x29, 0xeb, 0x0c, 0x20, 0x10, 0xd8,
355eb24fbdSCédric Le Goater     0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
365eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
375eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
385eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
395eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
405eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
415eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
425eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
435eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
445eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
455eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
465eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
475eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
485eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
495eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
505eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
515eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
525eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
535eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
545eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
555eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
565eb24fbdSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
575eb24fbdSCédric Le Goater };
585eb24fbdSCédric Le Goater define_sfdp_read(n25q256a);
59dc907a66SCédric Le Goater 
60dc907a66SCédric Le Goater 
61dc907a66SCédric Le Goater /*
62dc907a66SCédric Le Goater  * Matronix
63dc907a66SCédric Le Goater  */
64dc907a66SCédric Le Goater 
65dc907a66SCédric Le Goater /* mx25l25635e. No 4B opcodes */
66dc907a66SCédric Le Goater static const uint8_t sfdp_mx25l25635e[] = {
67dc907a66SCédric Le Goater     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x01, 0xff,
68dc907a66SCédric Le Goater     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
69dc907a66SCédric Le Goater     0xc2, 0x00, 0x01, 0x04, 0x60, 0x00, 0x00, 0xff,
70dc907a66SCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
71dc907a66SCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
72dc907a66SCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
73dc907a66SCédric Le Goater     0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
74dc907a66SCédric Le Goater     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
75dc907a66SCédric Le Goater     0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
76dc907a66SCédric Le Goater     0xff, 0xff, 0x00, 0xff, 0x0c, 0x20, 0x0f, 0x52,
77dc907a66SCédric Le Goater     0x10, 0xd8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
78dc907a66SCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
79dc907a66SCédric Le Goater     0x00, 0x36, 0x00, 0x27, 0xf7, 0x4f, 0xff, 0xff,
80dc907a66SCédric Le Goater     0xd9, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
81dc907a66SCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
82dc907a66SCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
83dc907a66SCédric Le Goater };
84dc907a66SCédric Le Goater define_sfdp_read(mx25l25635e)
85*51f4613dSCédric Le Goater 
86*51f4613dSCédric Le Goater static const uint8_t sfdp_mx25l25635f[] = {
87*51f4613dSCédric Le Goater     0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x01, 0xff,
88*51f4613dSCédric Le Goater     0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
89*51f4613dSCédric Le Goater     0xc2, 0x00, 0x01, 0x04, 0x60, 0x00, 0x00, 0xff,
90*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
91*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
92*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
93*51f4613dSCédric Le Goater     0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
94*51f4613dSCédric Le Goater     0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
95*51f4613dSCédric Le Goater     0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
96*51f4613dSCédric Le Goater     0xff, 0xff, 0x44, 0xeb, 0x0c, 0x20, 0x0f, 0x52,
97*51f4613dSCédric Le Goater     0x10, 0xd8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
98*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
99*51f4613dSCédric Le Goater     0x00, 0x36, 0x00, 0x27, 0x9d, 0xf9, 0xc0, 0x64,
100*51f4613dSCédric Le Goater     0x85, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
101*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
102*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
103*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
104*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xc2, 0xf5, 0x08, 0x0a,
105*51f4613dSCédric Le Goater     0x08, 0x04, 0x03, 0x06, 0x00, 0x00, 0x07, 0x29,
106*51f4613dSCédric Le Goater     0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
107*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
108*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
109*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
110*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
111*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
112*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
113*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
114*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
115*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
116*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
117*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
118*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
119*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
120*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
121*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
122*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
123*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
124*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
125*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
126*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
127*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
128*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
129*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
130*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
131*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
132*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
133*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
134*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
135*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
136*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
137*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
138*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
139*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
140*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
141*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
142*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
143*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
144*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
145*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
146*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
147*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
148*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
149*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
150*51f4613dSCédric Le Goater     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
151*51f4613dSCédric Le Goater };
152*51f4613dSCédric Le Goater define_sfdp_read(mx25l25635f);
153