dc907a667c
The SFDP table is 0x80 bytes long. The mandatory table for basic features is available at byte 0x30 and an extra Macronix specific table is available at 0x60. 4B opcodes are not supported. Reviewed-by: Francisco Iglesias <frasse.iglesias@gmail.com> Message-Id: <20220722063602.128144-4-clg@kaod.org> Message-Id: <20221013161241.2805140-5-clg@kaod.org> Signed-off-by: Cédric Le Goater <clg@kaod.org>
85 lines
3.3 KiB
C
85 lines
3.3 KiB
C
/*
|
|
* M25P80 Serial Flash Discoverable Parameter (SFDP)
|
|
*
|
|
* Copyright (c) 2020, IBM Corporation.
|
|
*
|
|
* This code is licensed under the GPL version 2 or later. See the
|
|
* COPYING file in the top-level directory.
|
|
*/
|
|
|
|
#include "qemu/osdep.h"
|
|
#include "qemu/host-utils.h"
|
|
#include "m25p80_sfdp.h"
|
|
|
|
#define define_sfdp_read(model) \
|
|
uint8_t m25p80_sfdp_##model(uint32_t addr) \
|
|
{ \
|
|
assert(is_power_of_2(sizeof(sfdp_##model))); \
|
|
return sfdp_##model[addr & (sizeof(sfdp_##model) - 1)]; \
|
|
}
|
|
|
|
/*
|
|
* Micron
|
|
*/
|
|
static const uint8_t sfdp_n25q256a[] = {
|
|
0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x00, 0xff,
|
|
0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xe5, 0x20, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x0f,
|
|
0x29, 0xeb, 0x27, 0x6b, 0x08, 0x3b, 0x27, 0xbb,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x27, 0xbb,
|
|
0xff, 0xff, 0x29, 0xeb, 0x0c, 0x20, 0x10, 0xd8,
|
|
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
};
|
|
define_sfdp_read(n25q256a);
|
|
|
|
|
|
/*
|
|
* Matronix
|
|
*/
|
|
|
|
/* mx25l25635e. No 4B opcodes */
|
|
static const uint8_t sfdp_mx25l25635e[] = {
|
|
0x53, 0x46, 0x44, 0x50, 0x00, 0x01, 0x01, 0xff,
|
|
0x00, 0x00, 0x01, 0x09, 0x30, 0x00, 0x00, 0xff,
|
|
0xc2, 0x00, 0x01, 0x04, 0x60, 0x00, 0x00, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xe5, 0x20, 0xf3, 0xff, 0xff, 0xff, 0xff, 0x0f,
|
|
0x44, 0xeb, 0x08, 0x6b, 0x08, 0x3b, 0x04, 0xbb,
|
|
0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff,
|
|
0xff, 0xff, 0x00, 0xff, 0x0c, 0x20, 0x0f, 0x52,
|
|
0x10, 0xd8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0x00, 0x36, 0x00, 0x27, 0xf7, 0x4f, 0xff, 0xff,
|
|
0xd9, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
};
|
|
define_sfdp_read(mx25l25635e)
|