static void flash_erase(Flash *s, int offset, FlashCMD cmd) { uint32_t len; uint8_t capa_to_assert = 0; switch (cmd) { case ERASE_4K: case ERASE4_4K: len = 4 << 10; capa_to_assert = ER_4K; break; case ERASE_32K: case ERASE4_32K: len = 32 << 10; capa_to_assert = ER_32K; break; case ERASE_SECTOR: case ERASE4_SECTOR: len = s->pi->sector_size; break; case BULK_ERASE: len = s->size; break; case DIE_ERASE: if (s->pi->die_cnt) { len = s->size / s->pi->die_cnt; offset = offset & (~(len - 1)); } else { qemu_log_mask(LOG_GUEST_ERROR, "M25P80: die erase is not supported" " by device\n"); return; } break; default: abort(); } DB_PRINT_L(0, "offset = %#x, len = %d\n", offset, len); if ((s->pi->flags & capa_to_assert) != capa_to_assert) { qemu_log_mask(LOG_GUEST_ERROR, "M25P80: %d erase size not supported by" " device\n", len); } if (!s->write_enable) { qemu_log_mask(LOG_GUEST_ERROR, "M25P80: erase with write protect!\n"); return; } memset(s->storage + offset, 0xff, len); flash_sync_area(s, offset, len); }
static void flash_erase(Flash *s, int offset, FlashCMD cmd) { uint32_t len; uint8_t capa_to_assert = 0; switch (cmd) { case ERASE_4K: len = 4 << 10; capa_to_assert = ER_4K; break; case ERASE_32K: len = 32 << 10; capa_to_assert = ER_32K; break; case ERASE_SECTOR: len = s->pi->sector_size; break; case BULK_ERASE: len = s->size; break; default: abort(); } DB_PRINT("offset = %#x, len = %d\n", offset, len); if ((s->pi->flags & capa_to_assert) != capa_to_assert) { hw_error("m25p80: %dk erase size not supported by device\n", len); } if (!s->write_enable) { DB_PRINT("erase with write protect!\n"); return; } memset(s->storage + offset, 0xff, len); flash_sync_area(s, offset, len); }