*************** static int onenand_wait(struct mtd_info 
*** 311,329 ****
  	ctrl = this->read_word(this->base + ONENAND_REG_CTRL_STATUS);
  
  	if (ctrl & ONENAND_CTRL_ERROR) {
- 		DEBUG(MTD_DEBUG_LEVEL0, "onenand_wait: controller error = 0x%04x", ctrl);
- 		return -EAGAIN;
  	}
  
  	if (ctrl & ONENAND_CTRL_LOCK) {
- 		DEBUG(MTD_DEBUG_LEVEL0, "onenand_wait: it's locked error = 0x%04x", ctrl);
- 		return -EIO;
  	}
  
  	if (interrupt & ONENAND_INT_READ) {
  		ecc = this->read_word(this->base + ONENAND_REG_ECC_STATUS);
  		if (ecc & ONENAND_ECC_2BIT_ALL) {
- 			DEBUG(MTD_DEBUG_LEVEL0, "onenand_wait: ECC error = 0x%04x", ecc);
  			return -EBADMSG;
  		}
  	}
--- 311,331 ----
  	ctrl = this->read_word(this->base + ONENAND_REG_CTRL_STATUS);
  
  	if (ctrl & ONENAND_CTRL_ERROR) {
+ 		/* It maybe occur at initial bad block */
+ 		DEBUG(MTD_DEBUG_LEVEL0, "onenand_wait: controller error = 0x%04x\n", ctrl);
+ 		/* Clear other interrupt bits for preventing ECC error */
+ 		interrupt &= ONENAND_INT_MASTER;
  	}
  
  	if (ctrl & ONENAND_CTRL_LOCK) {
+ 		DEBUG(MTD_DEBUG_LEVEL0, "onenand_wait: it's locked error = 0x%04x\n", ctrl);
+ 		return -EACCES;
  	}
  
  	if (interrupt & ONENAND_INT_READ) {
  		ecc = this->read_word(this->base + ONENAND_REG_ECC_STATUS);
  		if (ecc & ONENAND_ECC_2BIT_ALL) {
+ 			DEBUG(MTD_DEBUG_LEVEL0, "onenand_wait: ECC error = 0x%04x\n", ecc);
  			return -EBADMSG;
  		}
  	}
