xref: /openbmc/qemu/hw/block/m25p80_sfdp.c (revision 06ad8939)
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