598
599
600 map_write(map, CMD(0xB0), chip->in_progress_block_addr);
601 chip->oldstate = FL_ERASING;
602 chip->state = FL_ERASE_SUSPENDING;
603 chip->erase_suspended = 1;
604 for (;;) {
605 if (chip_ready(map, adr))
606 break;
607
608 if (time_after(jiffies, timeo)) {
609
610
611
612
613
614 map_write(map, CMD(0x30), chip->in_progress_block_addr);
615 chip->state = FL_ERASING;
616 chip->oldstate = FL_READY;
617 printk(KERN_ERR "MTD %s(): chip not ready after erase suspend\n", __func__);
618 return -EIO;
619 }
620
621 spin_unlock(chip->mutex);
622 cfi_udelay(1);
623 spin_lock(chip->mutex);
624
625
626 }
627 chip->state = FL_READY;
628 return 0;
629
630 case FL_XIP_WHILE_ERASING:
631 if (mode != FL_READY && mode != FL_POINT &&
632 (!cfip || !(cfip->EraseSuspend&2)))
633 goto sleep;
634 chip->oldstate = chip->state;
635 chip->state = FL_READY;
636 return 0;
637
638 case FL_POINT: