chip->ecc.write_page_raw = denali_write_page_raw;
        chip->ecc.read_oob = denali_read_oob;
        chip->ecc.write_oob = denali_write_oob;
-       chip->erase = denali_erase;
+       chip->legacy.erase = denali_erase;
 
        ret = denali_multidev_fixup(denali);
        if (ret)
 
                    (page + pages_per_block))
                        chip->pagebuf = -1;
 
-               status = chip->erase(chip, page & chip->pagemask);
+               if (chip->legacy.erase)
+                       status = chip->legacy.erase(chip,
+                                                   page & chip->pagemask);
+               else
+                       status = single_erase(chip, page & chip->pagemask);
 
                /* See if block erase succeeded */
                if (status) {
                chip->options |= NAND_ROW_ADDR_3;
 
        chip->badblockbits = 8;
-       chip->erase = single_erase;
 
        /* Do not replace user supplied command function! */
        if (mtd->writesize > 512 && chip->legacy.cmdfunc == nand_command)
 
  * @waitfunc: hardware specific function for wait on ready.
  * @block_bad: check if a block is bad, using OOB markers
  * @block_markbad: mark a block bad
+ * @erase: erase function
  *
  * If you look at this structure you're already wrong. These fields/hooks are
  * all deprecated.
        int (*waitfunc)(struct nand_chip *chip);
        int (*block_bad)(struct nand_chip *chip, loff_t ofs);
        int (*block_markbad)(struct nand_chip *chip, loff_t ofs);
+       int (*erase)(struct nand_chip *chip, int page);
 };
 
 /**
  * @buf_align:         minimum buffer alignment required by a platform
  * @dummy_controller:  dummy controller implementation for drivers that can
  *                     only control a single chip
- * @erase:             [REPLACEABLE] erase function
  * @chip_delay:                [BOARDSPECIFIC] chip dependent delay for transferring
  *                     data from array to read regs (tR).
  * @state:             [INTERN] the current state of the NAND device
        int (*exec_op)(struct nand_chip *chip,
                       const struct nand_operation *op,
                       bool check_only);
-       int (*erase)(struct nand_chip *chip, int page);
        int (*set_features)(struct nand_chip *chip, int feature_addr,
                            uint8_t *subfeature_para);
        int (*get_features)(struct nand_chip *chip, int feature_addr,