From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC 05/11] mtd/nand: take nand_ecc_ctrl initialization out of nand_scan_tail
Date: Sun, 14 Jun 2015 13:50:32 +0200 [thread overview]
Message-ID: <20150614135032.2b15cbdc@bbrezillon> (raw)
In-Reply-To: <1433505164-24112-6-git-send-email-r.spliet@ultimaker.com>
On Fri, 5 Jun 2015 13:52:38 +0200
Roy Spliet <r.spliet@ultimaker.com> wrote:
Ditto (work not mainlined yet, so we'd better either get rid of it).
BTW, a commit message would help understanding what you're doing in
this patch (even if I'm probably the one who omit the commit message in
the first place, that doesn't mean you should do the same ;-))
> From: yassin <yassinjaffer@gmail.com>
>
> Signed-off-by: Roy Spliet <r.spliet@ultimaker.com>
> ---
> drivers/mtd/nand/nand_base.c | 101 ++++++++++++++++++++++++++-----------------
> 1 file changed, 61 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index 1c514a0..83586cc 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -4114,47 +4114,15 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
> }
> EXPORT_SYMBOL(nand_scan_ident);
>
> -
> -/**
> - * nand_scan_tail - [NAND Interface] Scan for the NAND device
> - * @mtd: MTD device structure
> - *
> - * This is the second phase of the normal nand_scan() function. It fills out
> - * all the uninitialized function pointers with the defaults and scans for a
> - * bad block table if appropriate.
> +/*
> + * Initialize ECC struct:
> + * - fill ECC struct with default function/values when these ones are undefined
> + * - fill ECC infos based on MTD device
> */
> -int nand_scan_tail(struct mtd_info *mtd)
> +static int nand_ecc_ctrl_init(struct mtd_info *mtd, struct nand_ecc_ctrl *ecc)
> {
> int i;
> - struct nand_chip *chip = mtd->priv;
> - struct nand_ecc_ctrl *ecc = &chip->ecc;
> - struct nand_buffers *nbuf;
>
> - /* New bad blocks should be marked in OOB, flash-based BBT, or both */
> - BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
> - !(chip->bbt_options & NAND_BBT_USE_FLASH));
> -
> - if (!(chip->options & NAND_OWN_BUFFERS)) {
> -#ifndef __UBOOT__
> - nbuf = kzalloc(sizeof(*nbuf) + mtd->writesize
> - + mtd->oobsize * 3, GFP_KERNEL);
> - if (!nbuf)
> - return -ENOMEM;
> - nbuf->ecccalc = (uint8_t *)(nbuf + 1);
> - nbuf->ecccode = nbuf->ecccalc + mtd->oobsize;
> - nbuf->databuf = nbuf->ecccode + mtd->oobsize;
> -#else
> - nbuf = kzalloc(sizeof(struct nand_buffers), GFP_KERNEL);
> -#endif
> -
> - chip->buffers = nbuf;
> - } else {
> - if (!chip->buffers)
> - return -ENOMEM;
> - }
> -
> - /* Set the internal oob buffer location, just after the page data */
> - chip->oob_poi = chip->buffers->databuf + mtd->writesize;
>
> /*
> * If no default placement scheme is given, select an appropriate one.
> @@ -4180,9 +4148,6 @@ int nand_scan_tail(struct mtd_info *mtd)
> }
> }
>
> - if (!chip->write_page)
> - chip->write_page = nand_write_page;
> -
> /*
> * Check ECC mode, default to software if 3byte/512byte hardware ECC is
> * selected and we have 256 byte pagesize fallback to software ECC
> @@ -4349,6 +4314,62 @@ int nand_scan_tail(struct mtd_info *mtd)
> }
> ecc->total = ecc->steps * ecc->bytes;
>
> + return 0;
> +}
> +
> +/**
> + * nand_scan_tail - [NAND Interface] Scan for the NAND device
> + * @mtd: MTD device structure
> + *
> + * This is the second phase of the normal nand_scan() function. It fills out
> + * all the uninitialized function pointers with the defaults and scans for a
> + * bad block table if appropriate.
> + */
> +int nand_scan_tail(struct mtd_info *mtd)
> +{
> + int ret;
> + struct nand_chip *chip = mtd->priv;
> + struct nand_ecc_ctrl *ecc = &chip->ecc;
> + struct nand_buffers *nbuf;
> +
> + /* New bad blocks should be marked in OOB, flash-based BBT, or both */
> + BUG_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
> + !(chip->bbt_options & NAND_BBT_USE_FLASH));
> +
> + if (!(chip->options & NAND_OWN_BUFFERS)) {
> +#ifndef __UBOOT__
> + nbuf = kzalloc(sizeof(*nbuf) + mtd->writesize
> + + mtd->oobsize * 3, GFP_KERNEL);
> + if (!nbuf)
> + return -ENOMEM;
> + nbuf->ecccalc = (uint8_t *)(nbuf + 1);
> + nbuf->ecccode = nbuf->ecccalc + mtd->oobsize;
> + nbuf->databuf = nbuf->ecccode + mtd->oobsize;
> +#else
> + nbuf = kzalloc(sizeof(struct nand_buffers), GFP_KERNEL);
> +#endif
> +
> + chip->buffers = nbuf;
> + } else {
> + if (!chip->buffers)
> + return -ENOMEM;
> + }
> +
> + /* Set the internal oob buffer location, just after the page data */
> + chip->oob_poi = chip->buffers->databuf + mtd->writesize;
> +
> + if (!chip->write_page)
> + chip->write_page = nand_write_page;
> +
> + /* Initialize ECC struct */
> + ret = nand_ecc_ctrl_init(mtd, ecc);
> + if (ret) {
> + if (!(chip->options & NAND_OWN_BUFFERS))
> + kfree(chip->buffers);
> +
> + return ret;
> + }
> +
> /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
> if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
> switch (ecc->steps) {
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
next prev parent reply other threads:[~2015-06-14 11:50 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-05 11:52 [U-Boot] [RFC] Sunxi NAND support for U-Boot Roy Spliet
2015-06-05 11:52 ` [U-Boot] [RFC 01/11] mtd/nand: define struct nand_timings Roy Spliet
2015-06-05 11:52 ` [U-Boot] [RFC 02/11] mtd/nand: add ONFI timing mode to nand_timings converter Roy Spliet
2015-06-05 22:02 ` Scott Wood
2015-06-08 8:11 ` Roy Spliet
2015-06-08 8:34 ` [U-Boot] [linux-sunxi] " Michal Suchanek
2015-06-08 8:41 ` Roy Spliet
2015-06-14 11:59 ` Boris Brezillon
2015-06-08 20:24 ` [U-Boot] " Scott Wood
2015-06-10 8:33 ` Hans de Goede
2015-06-10 19:06 ` Scott Wood
2015-06-05 11:52 ` [U-Boot] [RFC 03/11] mtd/nand: support ONFI timing mode retrieval for non-ONFI Roy Spliet
2015-06-14 11:53 ` Boris Brezillon
2015-06-05 11:52 ` [U-Boot] [RFC 04/11] mtd/nand: add page status table (pst) Roy Spliet
2015-06-14 11:52 ` Boris Brezillon
2015-06-05 11:52 ` [U-Boot] [RFC 05/11] mtd/nand: take nand_ecc_ctrl initialization out of nand_scan_tail Roy Spliet
2015-06-14 11:50 ` Boris Brezillon [this message]
2015-06-05 11:52 ` [U-Boot] [RFC 06/11] mtd/nand: Add randomisation layer Roy Spliet
2015-06-14 11:47 ` Boris Brezillon
2015-06-05 11:52 ` [U-Boot] [RFC 07/11] mtd/nand Add Sunxi NAND driver Roy Spliet
2015-06-14 11:42 ` Boris Brezillon
2015-06-14 11:45 ` Boris Brezillon
2015-06-05 11:52 ` [U-Boot] [RFC 08/11] mtd/nand: Add DT definitions for Olimex Lime Roy Spliet
2015-06-14 11:39 ` Boris Brezillon
2015-06-05 11:52 ` [U-Boot] [RFC 09/11] sunxi/nand: Enable UBI and NAND commands Roy Spliet
2015-06-06 15:13 ` Hans de Goede
2015-06-06 15:36 ` Ian Campbell
2015-06-08 7:38 ` Roy Spliet
2015-06-08 9:12 ` Ian Campbell
2015-06-05 11:52 ` [U-Boot] [RFC 10/11] mtd/nand: Define bootcmd for nand Roy Spliet
2015-06-05 11:52 ` [U-Boot] [RFC 11/11] mtd/nand: Sunxi NAND boot partition definitions Roy Spliet
2015-06-07 16:48 ` [U-Boot] [linux-sunxi] " Michal Suchanek
2015-06-08 8:38 ` Roy Spliet
2015-06-08 8:54 ` Michal Suchanek
2015-06-08 9:11 ` Roy Spliet
2015-06-08 10:48 ` Yassin
2015-06-08 11:35 ` Roy Spliet
2015-06-14 11:31 ` Boris Brezillon
2015-06-15 8:00 ` Hans de Goede
2015-06-08 13:16 ` Hans de Goede
2015-06-08 13:56 ` Roy Spliet
2015-06-14 11:25 ` Boris Brezillon
2015-06-14 11:56 ` Michal Suchanek
2015-06-14 12:18 ` Boris Brezillon
2015-06-14 17:42 ` Michal Suchanek
2015-06-14 19:07 ` Boris Brezillon
2015-06-06 15:09 ` [U-Boot] [RFC] Sunxi NAND support for U-Boot Hans de Goede
2015-06-06 15:11 ` Hans de Goede
2015-06-14 11:13 ` Boris Brezillon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150614135032.2b15cbdc@bbrezillon \
--to=boris.brezillon@free-electrons.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox