Commit d50ffc58 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mtd/fixes-for-4.20-rc2' of git://git.infradead.org/linux-mtd

Pull MTD fixes from Boris Brezillon:
 "MTD changes:
   - Kill a VLA in sa1100

  SPI NOR changes:
   - Make sure ->addr_width is restored when SFDP parsing fails
   - Propate errors happening in cqspi_direct_read_execute()

  NAND changes:
   - Fix kernel-doc mismatch
   - Fix nanddev_neraseblocks() to return the correct value
   - Avoid selection of BCH_CONST_PARAMS when some users require dynamic
     BCH settings"

* tag 'mtd/fixes-for-4.20-rc2' of git://git.infradead.org/linux-mtd:
  mtd: nand: Fix nanddev_pos_next_page() kernel-doc header
  mtd: sa1100: avoid VLA in sa1100_setup_mtd
  mtd: spi-nor: Reset nor->addr_width when SFDP parsing failed
  mtd: spi-nor: cadence-quadspi: Return error code in cqspi_direct_read_execute()
  mtd: nand: Fix nanddev_neraseblocks()
  mtd: nand: drop kernel-doc notation for a deleted function parameter
  mtd: docg3: don't set conflicting BCH_CONST_PARAMS option
parents 85758777 98ee3fc7
...@@ -207,7 +207,7 @@ comment "Disk-On-Chip Device Drivers" ...@@ -207,7 +207,7 @@ comment "Disk-On-Chip Device Drivers"
config MTD_DOCG3 config MTD_DOCG3
tristate "M-Systems Disk-On-Chip G3" tristate "M-Systems Disk-On-Chip G3"
select BCH select BCH
select BCH_CONST_PARAMS select BCH_CONST_PARAMS if !MTD_NAND_BCH
select BITREVERSE select BITREVERSE
help help
This provides an MTD device driver for the M-Systems DiskOnChip This provides an MTD device driver for the M-Systems DiskOnChip
......
...@@ -221,7 +221,14 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev, ...@@ -221,7 +221,14 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
info->mtd = info->subdev[0].mtd; info->mtd = info->subdev[0].mtd;
ret = 0; ret = 0;
} else if (info->num_subdev > 1) { } else if (info->num_subdev > 1) {
struct mtd_info *cdev[nr]; struct mtd_info **cdev;
cdev = kmalloc_array(nr, sizeof(*cdev), GFP_KERNEL);
if (!cdev) {
ret = -ENOMEM;
goto err;
}
/* /*
* We detected multiple devices. Concatenate them together. * We detected multiple devices. Concatenate them together.
*/ */
...@@ -230,6 +237,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev, ...@@ -230,6 +237,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev,
info->mtd = mtd_concat_create(cdev, info->num_subdev, info->mtd = mtd_concat_create(cdev, info->num_subdev,
plat->name); plat->name);
kfree(cdev);
if (info->mtd == NULL) { if (info->mtd == NULL) {
ret = -ENXIO; ret = -ENXIO;
goto err; goto err;
......
...@@ -590,7 +590,6 @@ nand_get_device(struct mtd_info *mtd, int new_state) ...@@ -590,7 +590,6 @@ nand_get_device(struct mtd_info *mtd, int new_state)
/** /**
* panic_nand_wait - [GENERIC] wait until the command is done * panic_nand_wait - [GENERIC] wait until the command is done
* @mtd: MTD device structure
* @chip: NAND chip structure * @chip: NAND chip structure
* @timeo: timeout * @timeo: timeout
* *
......
...@@ -996,7 +996,7 @@ static int cqspi_direct_read_execute(struct spi_nor *nor, u_char *buf, ...@@ -996,7 +996,7 @@ static int cqspi_direct_read_execute(struct spi_nor *nor, u_char *buf,
err_unmap: err_unmap:
dma_unmap_single(nor->dev, dma_dst, len, DMA_FROM_DEVICE); dma_unmap_single(nor->dev, dma_dst, len, DMA_FROM_DEVICE);
return 0; return ret;
} }
static ssize_t cqspi_read(struct spi_nor *nor, loff_t from, static ssize_t cqspi_read(struct spi_nor *nor, loff_t from,
......
...@@ -3250,13 +3250,15 @@ static int spi_nor_init_params(struct spi_nor *nor, ...@@ -3250,13 +3250,15 @@ static int spi_nor_init_params(struct spi_nor *nor,
memcpy(&sfdp_params, params, sizeof(sfdp_params)); memcpy(&sfdp_params, params, sizeof(sfdp_params));
memcpy(&prev_map, &nor->erase_map, sizeof(prev_map)); memcpy(&prev_map, &nor->erase_map, sizeof(prev_map));
if (spi_nor_parse_sfdp(nor, &sfdp_params)) if (spi_nor_parse_sfdp(nor, &sfdp_params)) {
nor->addr_width = 0;
/* restore previous erase map */ /* restore previous erase map */
memcpy(&nor->erase_map, &prev_map, memcpy(&nor->erase_map, &prev_map,
sizeof(nor->erase_map)); sizeof(nor->erase_map));
else } else {
memcpy(params, &sfdp_params, sizeof(*params)); memcpy(params, &sfdp_params, sizeof(*params));
} }
}
return 0; return 0;
} }
......
...@@ -324,9 +324,8 @@ static inline unsigned int nanddev_ntargets(const struct nand_device *nand) ...@@ -324,9 +324,8 @@ static inline unsigned int nanddev_ntargets(const struct nand_device *nand)
*/ */
static inline unsigned int nanddev_neraseblocks(const struct nand_device *nand) static inline unsigned int nanddev_neraseblocks(const struct nand_device *nand)
{ {
return (u64)nand->memorg.luns_per_target * return nand->memorg.ntargets * nand->memorg.luns_per_target *
nand->memorg.eraseblocks_per_lun * nand->memorg.eraseblocks_per_lun;
nand->memorg.pages_per_eraseblock;
} }
/** /**
...@@ -569,7 +568,7 @@ static inline void nanddev_pos_next_eraseblock(struct nand_device *nand, ...@@ -569,7 +568,7 @@ static inline void nanddev_pos_next_eraseblock(struct nand_device *nand,
} }
/** /**
* nanddev_pos_next_eraseblock() - Move a position to the next page * nanddev_pos_next_page() - Move a position to the next page
* @nand: NAND device * @nand: NAND device
* @pos: the position to update * @pos: the position to update
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment