SPI_MEM_OP_NO_DUMMY,                                 \
                   SPI_MEM_OP_DATA_OUT(1, buf, 0))
 
+static int
+w25q128_post_bfpt_fixups(struct spi_nor *nor,
+                        const struct sfdp_parameter_header *bfpt_header,
+                        const struct sfdp_bfpt *bfpt)
+{
+       /*
+        * Zetta ZD25Q128C is a clone of the Winbond device. But the encoded
+        * size is really wrong. It seems that they confused Mbit with MiB.
+        * Thus the flash is discovered as a 2MiB device.
+        */
+       if (bfpt_header->major == SFDP_JESD216_MAJOR &&
+           bfpt_header->minor == SFDP_JESD216_MINOR &&
+           nor->params->size == SZ_2M &&
+           nor->params->erase_map.regions[0].size == SZ_2M) {
+               nor->params->size = SZ_16M;
+               nor->params->erase_map.regions[0].size = SZ_16M;
+       }
+
+       return 0;
+}
+
+static const struct spi_nor_fixups w25q128_fixups = {
+       .post_bfpt = w25q128_post_bfpt_fixups,
+};
+
 static int
 w25q256_post_bfpt_fixups(struct spi_nor *nor,
                         const struct sfdp_parameter_header *bfpt_header,
                .size = SZ_16M,
                .flags = SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB,
                .no_sfdp_flags = SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ,
+               .fixups = &w25q128_fixups,
        }, {
                .id = SNOR_ID(0xef, 0x40, 0x19),
                .name = "w25q256",