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