mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
mtd: Stop updating erase_info->state and calling mtd_erase_callback()
MTD users are no longer checking erase_info->state to determine if the erase operation failed or succeeded. Moreover, mtd_erase_callback() is now a NOP. We can safely get rid of all mtd_erase_callback() calls and all erase_info->state assignments. While at it, get rid of the erase_info->state field, all MTD_ERASE_XXX definitions and the mtd_erase_callback() function. Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> Reviewed-by: Richard Weinberger <richard@nod.at> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> Acked-by: Bert Kenward <bkenward@solarflare.com> --- Changes in v2: - Address a few coding style issues (reported by Miquel) - Remove comments that are no longer valid (reported by Miquel)
This commit is contained in:
@@ -1993,20 +1993,8 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
||||
|
||||
static int cfi_intelext_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
|
||||
{
|
||||
unsigned long ofs, len;
|
||||
int ret;
|
||||
|
||||
ofs = instr->addr;
|
||||
len = instr->len;
|
||||
|
||||
ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
return cfi_varsize_frob(mtd, do_erase_oneblock, instr->addr,
|
||||
instr->len, NULL);
|
||||
}
|
||||
|
||||
static void cfi_intelext_sync (struct mtd_info *mtd)
|
||||
|
||||
@@ -2415,20 +2415,8 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
|
||||
|
||||
static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
|
||||
{
|
||||
unsigned long ofs, len;
|
||||
int ret;
|
||||
|
||||
ofs = instr->addr;
|
||||
len = instr->len;
|
||||
|
||||
ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
return cfi_varsize_frob(mtd, do_erase_oneblock, instr->addr,
|
||||
instr->len, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -2436,7 +2424,6 @@ static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr)
|
||||
{
|
||||
struct map_info *map = mtd->priv;
|
||||
struct cfi_private *cfi = map->fldrv_priv;
|
||||
int ret = 0;
|
||||
|
||||
if (instr->addr != 0)
|
||||
return -EINVAL;
|
||||
@@ -2444,14 +2431,7 @@ static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr)
|
||||
if (instr->len != mtd->size)
|
||||
return -EINVAL;
|
||||
|
||||
ret = do_erase_chip(map, &cfi->chips[0]);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
return do_erase_chip(map, &cfi->chips[0]);
|
||||
}
|
||||
|
||||
static int do_atmel_lock(struct map_info *map, struct flchip *chip,
|
||||
|
||||
@@ -965,9 +965,6 @@ static int cfi_staa_erase_varsize(struct mtd_info *mtd,
|
||||
}
|
||||
}
|
||||
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -131,8 +131,6 @@ static int mapram_erase (struct mtd_info *mtd, struct erase_info *instr)
|
||||
allff = map_word_ff(map);
|
||||
for (i=0; i<instr->len; i += map_bankwidth(map))
|
||||
map_write(map, allff, instr->addr + i);
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,6 @@ static int bcm47xxsflash_poll(struct bcm47xxsflash *b47s, int timeout)
|
||||
static int bcm47xxsflash_erase(struct mtd_info *mtd, struct erase_info *erase)
|
||||
{
|
||||
struct bcm47xxsflash *b47s = mtd->priv;
|
||||
int err;
|
||||
|
||||
switch (b47s->type) {
|
||||
case BCM47XXSFLASH_TYPE_ST:
|
||||
@@ -89,13 +88,7 @@ static int bcm47xxsflash_erase(struct mtd_info *mtd, struct erase_info *erase)
|
||||
break;
|
||||
}
|
||||
|
||||
err = bcm47xxsflash_poll(b47s, HZ);
|
||||
if (err)
|
||||
erase->state = MTD_ERASE_FAILED;
|
||||
else
|
||||
erase->state = MTD_ERASE_DONE;
|
||||
|
||||
return err;
|
||||
return bcm47xxsflash_poll(b47s, HZ);
|
||||
}
|
||||
|
||||
static int bcm47xxsflash_read(struct mtd_info *mtd, loff_t from, size_t len,
|
||||
|
||||
@@ -88,17 +88,12 @@ static int block2mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
size_t len = instr->len;
|
||||
int err;
|
||||
|
||||
instr->state = MTD_ERASING;
|
||||
mutex_lock(&dev->write_mutex);
|
||||
err = _block2mtd_erase(dev, from, len);
|
||||
mutex_unlock(&dev->write_mutex);
|
||||
if (err) {
|
||||
if (err)
|
||||
pr_err("erase failed err = %d\n", err);
|
||||
instr->state = MTD_ERASE_FAILED;
|
||||
} else
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
|
||||
mtd_erase_callback(instr);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
@@ -1191,39 +1191,27 @@ static int doc_erase(struct mtd_info *mtd, struct erase_info *info)
|
||||
{
|
||||
struct docg3 *docg3 = mtd->priv;
|
||||
uint64_t len;
|
||||
int block0, block1, page, ret, ofs = 0;
|
||||
int block0, block1, page, ret = 0, ofs = 0;
|
||||
|
||||
doc_dbg("doc_erase(from=%lld, len=%lld\n", info->addr, info->len);
|
||||
|
||||
info->state = MTD_ERASE_PENDING;
|
||||
calc_block_sector(info->addr + info->len, &block0, &block1, &page,
|
||||
&ofs, docg3->reliable);
|
||||
ret = -EINVAL;
|
||||
if (info->addr + info->len > mtd->size || page || ofs)
|
||||
goto reset_err;
|
||||
return -EINVAL;
|
||||
|
||||
ret = 0;
|
||||
calc_block_sector(info->addr, &block0, &block1, &page, &ofs,
|
||||
docg3->reliable);
|
||||
mutex_lock(&docg3->cascade->lock);
|
||||
doc_set_device_id(docg3, docg3->device_id);
|
||||
doc_set_reliable_mode(docg3);
|
||||
for (len = info->len; !ret && len > 0; len -= mtd->erasesize) {
|
||||
info->state = MTD_ERASING;
|
||||
ret = doc_erase_block(docg3, block0, block1);
|
||||
block0 += 2;
|
||||
block1 += 2;
|
||||
}
|
||||
mutex_unlock(&docg3->cascade->lock);
|
||||
|
||||
if (ret)
|
||||
goto reset_err;
|
||||
|
||||
info->state = MTD_ERASE_DONE;
|
||||
return 0;
|
||||
|
||||
reset_err:
|
||||
info->state = MTD_ERASE_FAILED;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -414,10 +414,7 @@ static int flash_erase (struct mtd_info *mtd,struct erase_info *instr)
|
||||
while (len)
|
||||
{
|
||||
if (!erase_block (addr))
|
||||
{
|
||||
instr->state = MTD_ERASE_FAILED;
|
||||
return (-EIO);
|
||||
}
|
||||
|
||||
addr += mtd->eraseregions[i].erasesize;
|
||||
len -= mtd->eraseregions[i].erasesize;
|
||||
@@ -425,9 +422,6 @@ static int flash_erase (struct mtd_info *mtd,struct erase_info *instr)
|
||||
if (addr == mtd->eraseregions[i].offset + (mtd->eraseregions[i].erasesize * mtd->eraseregions[i].numblocks)) i++;
|
||||
}
|
||||
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -220,10 +220,6 @@ static int dataflash_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
}
|
||||
mutex_unlock(&priv->lock);
|
||||
|
||||
/* Inform MTD subsystem that erase is complete */
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -60,8 +60,7 @@ static int ram_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
if (check_offs_len(mtd, instr->addr, instr->len))
|
||||
return -EINVAL;
|
||||
memset((char *)mtd->priv + instr->addr, 0xff, instr->len);
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,13 +39,6 @@ static int phram_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
|
||||
memset(start + instr->addr, 0xff, instr->len);
|
||||
|
||||
/*
|
||||
* This'll catch a few races. Free the thing before returning :)
|
||||
* I don't feel at all ashamed. This kind of thing is possible anyway
|
||||
* with flash, but unlikely.
|
||||
*/
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -184,12 +184,10 @@ static int pmc551_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
}
|
||||
|
||||
out:
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
#ifdef CONFIG_MTD_PMC551_DEBUG
|
||||
printk(KERN_DEBUG "pmc551_erase() done\n");
|
||||
#endif
|
||||
|
||||
mtd_erase_callback(instr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -175,19 +175,11 @@ static int powernv_flash_erase(struct mtd_info *mtd, struct erase_info *erase)
|
||||
{
|
||||
int rc;
|
||||
|
||||
erase->state = MTD_ERASING;
|
||||
|
||||
/* todo: register our own notifier to do a true async implementation */
|
||||
rc = powernv_flash_async_op(mtd, FLASH_OP_ERASE, erase->addr,
|
||||
erase->len, NULL, NULL);
|
||||
|
||||
if (rc) {
|
||||
if (rc)
|
||||
erase->fail_addr = erase->addr;
|
||||
erase->state = MTD_ERASE_FAILED;
|
||||
} else {
|
||||
erase->state = MTD_ERASE_DONE;
|
||||
}
|
||||
mtd_erase_callback(erase);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@@ -84,12 +84,7 @@ static int slram_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
slram_priv_t *priv = mtd->priv;
|
||||
|
||||
memset(priv->start + instr->addr, 0xff, instr->len);
|
||||
/* This'll catch a few races. Free the thing before returning :)
|
||||
* I don't feel at all ashamed. This kind of thing is possible anyway
|
||||
* with flash, but unlikely.
|
||||
*/
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -518,7 +518,6 @@ static int spear_mtd_erase(struct mtd_info *mtd, struct erase_info *e_info)
|
||||
/* preparing the command for flash */
|
||||
ret = spear_smi_erase_sector(dev, bank, command, 4);
|
||||
if (ret) {
|
||||
e_info->state = MTD_ERASE_FAILED;
|
||||
mutex_unlock(&flash->lock);
|
||||
return ret;
|
||||
}
|
||||
@@ -527,8 +526,6 @@ static int spear_mtd_erase(struct mtd_info *mtd, struct erase_info *e_info)
|
||||
}
|
||||
|
||||
mutex_unlock(&flash->lock);
|
||||
e_info->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(e_info);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -195,7 +195,6 @@ static int sst25l_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
err = sst25l_erase_sector(flash, addr);
|
||||
if (err) {
|
||||
mutex_unlock(&flash->lock);
|
||||
instr->state = MTD_ERASE_FAILED;
|
||||
dev_err(&flash->spi->dev, "Erase failed\n");
|
||||
return err;
|
||||
}
|
||||
@@ -205,8 +204,6 @@ static int sst25l_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
|
||||
mutex_unlock(&flash->lock);
|
||||
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1825,13 +1825,9 @@ static int stfsm_mtd_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
|
||||
mutex_unlock(&fsm->lock);
|
||||
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
|
||||
out1:
|
||||
instr->state = MTD_ERASE_FAILED;
|
||||
mutex_unlock(&fsm->lock);
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -380,14 +380,8 @@ out:
|
||||
*/
|
||||
static int lpddr2_nvm_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
{
|
||||
int ret = lpddr2_nvm_do_block_op(mtd, instr->addr, instr->len,
|
||||
LPDDR2_NVM_ERASE);
|
||||
if (!ret) {
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return lpddr2_nvm_do_block_op(mtd, instr->addr, instr->len,
|
||||
LPDDR2_NVM_ERASE);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -693,8 +693,6 @@ static int lpddr_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
ofs += size;
|
||||
len -= size;
|
||||
}
|
||||
instr->state = MTD_ERASE_DONE;
|
||||
mtd_erase_callback(instr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -446,7 +446,6 @@ static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
|
||||
erase->addr = 0;
|
||||
offset += subdev->size;
|
||||
}
|
||||
instr->state = erase->state;
|
||||
kfree(erase);
|
||||
|
||||
return err;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user