Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5900554 authored by Huang Shijie's avatar Huang Shijie Committed by Brian Norris
Browse files

mtd: mxc-nand: kill the NAND_MAX_PAGESIZE/NAND_MAX_OOBSIZE



We kill the NAND_MAX_PAGESIZE/NAND_MAX_OOBSIZE by the following way:
 1.) Before we call the nand_scan_ident, we allocate a temporary buffer
     whose size is PAGE_SIZE.
 2.) After we finish the nand_scan_ident, we have already getten the
     page size and oob size. We will allocate the right buffer size
     again.

Signed-off-by: default avatarHuang Shijie <shijie8@gmail.com>
Reviewed-by: default avatarJosh Triplett <josh@joshtriplett.org>
Signed-off-by: default avatarBrian Norris <computersforpeace@gmail.com>
parent 2fec386a
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -1399,12 +1399,15 @@ static int mxcnd_probe(struct platform_device *pdev)
	int err = 0;

	/* Allocate memory for MTD device structure and private data */
	host = devm_kzalloc(&pdev->dev, sizeof(struct mxc_nand_host) +
			NAND_MAX_PAGESIZE + NAND_MAX_OOBSIZE, GFP_KERNEL);
	host = devm_kzalloc(&pdev->dev, sizeof(struct mxc_nand_host),
			GFP_KERNEL);
	if (!host)
		return -ENOMEM;

	host->data_buf = (uint8_t *)(host + 1);
	/* allocate a temporary buffer for the nand_scan_ident() */
	host->data_buf = devm_kzalloc(&pdev->dev, PAGE_SIZE, GFP_KERNEL);
	if (!host->data_buf)
		return -ENOMEM;

	host->dev = &pdev->dev;
	/* structures must be linked */
@@ -1532,6 +1535,15 @@ static int mxcnd_probe(struct platform_device *pdev)
		goto escan;
	}

	/* allocate the right size buffer now */
	devm_kfree(&pdev->dev, (void *)host->data_buf);
	host->data_buf = devm_kzalloc(&pdev->dev, mtd->writesize + mtd->oobsize,
					GFP_KERNEL);
	if (!host->data_buf) {
		err = -ENOMEM;
		goto escan;
	}

	/* Call preset again, with correct writesize this time */
	host->devtype_data->preset(mtd);