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