Commit e4a0cf9f authored by Mikhail Kshevetskiy's avatar Mikhail Kshevetskiy Committed by Miquel Raynal
Browse files

mtd: spinand: fix direct mapping creation sizes



Continuous mode is only supported for data reads, thus writing
requires only single flash page mapping.

Signed-off-by: default avatarMikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
parent b8df622c
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -1097,18 +1097,13 @@ static int spinand_create_dirmap(struct spinand_device *spinand,
				 unsigned int plane)
{
	struct nand_device *nand = spinand_to_nand(spinand);
	struct spi_mem_dirmap_info info = {
		.length = nanddev_page_size(nand) +
			  nanddev_per_page_oobsize(nand),
	};
	struct spi_mem_dirmap_info info = { 0 };
	struct spi_mem_dirmap_desc *desc;

	if (spinand->cont_read_possible)
		info.length = nanddev_eraseblock_size(nand);

	/* The plane number is passed in MSB just above the column address */
	info.offset = plane << fls(nand->memorg.pagesize);

	info.length = nanddev_page_size(nand) + nanddev_per_page_oobsize(nand);
	info.op_tmpl = *spinand->op_templates.update_cache;
	desc = devm_spi_mem_dirmap_create(&spinand->spimem->spi->dev,
					  spinand->spimem, &info);
@@ -1117,6 +1112,8 @@ static int spinand_create_dirmap(struct spinand_device *spinand,

	spinand->dirmaps[plane].wdesc = desc;

	if (spinand->cont_read_possible)
		info.length = nanddev_eraseblock_size(nand);
	info.op_tmpl = *spinand->op_templates.read_cache;
	desc = devm_spi_mem_dirmap_create(&spinand->spimem->spi->dev,
					  spinand->spimem, &info);
@@ -1132,6 +1129,7 @@ static int spinand_create_dirmap(struct spinand_device *spinand,
		return 0;
	}

	info.length = nanddev_page_size(nand) + nanddev_per_page_oobsize(nand);
	info.op_tmpl = *spinand->op_templates.update_cache;
	info.op_tmpl.data.ecc = true;
	desc = devm_spi_mem_dirmap_create(&spinand->spimem->spi->dev,
@@ -1141,6 +1139,8 @@ static int spinand_create_dirmap(struct spinand_device *spinand,

	spinand->dirmaps[plane].wdesc_ecc = desc;

	if (spinand->cont_read_possible)
		info.length = nanddev_eraseblock_size(nand);
	info.op_tmpl = *spinand->op_templates.read_cache;
	info.op_tmpl.data.ecc = true;
	desc = devm_spi_mem_dirmap_create(&spinand->spimem->spi->dev,