diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index 4f05caf34e..428db4a1d8 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -222,7 +222,8 @@ static const FlashPartInfo known_devices[] = { { INFO("is25lp016d", 0x9d6015, 0, 64 << 10, 32, ER_4K) }, { INFO("is25lp032", 0x9d6016, 0, 64 << 10, 64, ER_4K) }, { INFO("is25lp064", 0x9d6017, 0, 64 << 10, 128, ER_4K) }, - { INFO("is25lp128", 0x9d6018, 0, 64 << 10, 256, ER_4K) }, + { INFO("is25lp128", 0x9d6018, 0, 64 << 10, 256, ER_4K), + .sfdp_read = m25p80_sfdp_is25lp128 }, { INFO("is25lp256", 0x9d6019, 0, 64 << 10, 512, ER_4K) }, { INFO("is25wp032", 0x9d7016, 0, 64 << 10, 64, ER_4K) }, { INFO("is25wp064", 0x9d7017, 0, 64 << 10, 128, ER_4K) }, diff --git a/hw/block/m25p80_sfdp.c b/hw/block/m25p80_sfdp.c index a03a291a09..6e01178299 100644 --- a/hw/block/m25p80_sfdp.c +++ b/hw/block/m25p80_sfdp.c @@ -479,3 +479,12 @@ static const uint8_t sfdp_is25wp256[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, }; define_sfdp_read(is25wp256); + +uint8_t m25p80_sfdp_is25lp128(uint32_t addr) +{ + /* The sibling parts share SFDP data except for the density field. */ + if (addr == 0x37) { + return 0x07; + } + return m25p80_sfdp_is25wp256(addr); +} diff --git a/hw/block/m25p80_sfdp.h b/hw/block/m25p80_sfdp.h index 35785686a0..e6bfdfa7e8 100644 --- a/hw/block/m25p80_sfdp.h +++ b/hw/block/m25p80_sfdp.h @@ -28,6 +28,7 @@ uint8_t m25p80_sfdp_w25q512jv(uint32_t addr); uint8_t m25p80_sfdp_w25q80bl(uint32_t addr); uint8_t m25p80_sfdp_w25q01jvq(uint32_t addr); +uint8_t m25p80_sfdp_is25lp128(uint32_t addr); uint8_t m25p80_sfdp_is25wp256(uint32_t addr); #endif