From: Vikram Narayanan <vikram186@gmail.com>
To: Huang Shijie <b32955@freescale.com>
Cc: linux-mtd@lists.infradead.org
Subject: Re: [PATCH v5 11/11] mtd: gpmi: set the BCH's geometry with the ecc info
Date: Wed, 15 May 2013 22:01:16 +0530 [thread overview]
Message-ID: <5193B854.1030707@gmail.com> (raw)
In-Reply-To: <1368608042-9558-2-git-send-email-b32955@freescale.com>
Hello Huang,
On 5/15/2013 2:24 PM, Huang Shijie wrote:
> If the nand chip provides us the ECC info, we can use it firstly.
> The set_geometry_by_ecc_info() will use the ECC info, and
> calculate the parameters we need.
>
> Rename the old code to lagacy_set_geometry() which will takes effect
Couple of nitpicks.
Thorough out the code and in comments.
s/lagacy/legacy/
> when there is no ECC info from the nand chip or we fails in the ECC info case.
>
> Signed-off-by: Huang Shijie <b32955@freescale.com>
> ---
> drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 128 +++++++++++++++++++++++++++++++-
> 1 files changed, 127 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
> index 25ecfa1..53180da 100644
> --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
> +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
> @@ -112,7 +112,128 @@ static inline bool gpmi_check_ecc(struct gpmi_nand_data *this)
> return true;
> }
>
> -int common_nfc_set_geometry(struct gpmi_nand_data *this)
> +/*
> + * If we can get the ECC information from the nand chip, we do not
> + * need to calculate them ourselves.
> + *
> + * We may have available oob space in this case.
> + */
> +static bool set_geometry_by_ecc_info(struct gpmi_nand_data *this)
> +{
> + struct bch_geometry *geo = &this->bch_geometry;
> + struct mtd_info *mtd = &this->mtd;
> + struct nand_chip *chip = mtd->priv;
> + struct nand_oobfree *of = gpmi_hw_ecclayout.oobfree;
> + unsigned int block_mark_bit_offset;
> +
> + if (!(chip->ecc_strength > 0 && chip->ecc_step > 0))
> + return false;
> +
> + switch (chip->ecc_step) {
> + case SZ_512:
> + geo->gf_len = 13;
> + break;
> + case SZ_1K:
> + geo->gf_len = 14;
> + break;
> + default:
> + dev_err(this->dev,
> + "unsupported nand chip. ecc bits : %d, ecc size : %d\n",
> + chip->ecc_strength, chip->ecc_step);
> + return false;
> + }
> + geo->ecc_chunk_size = chip->ecc_step;
> + geo->ecc_strength = round_up(chip->ecc_strength, 2);
> + if (!gpmi_check_ecc(this))
> + return false;
> +
> + /* Keep the C >= O */
> + if (geo->ecc_chunk_size < mtd->oobsize) {
> + dev_err(this->dev,
> + "unsupported nand chip. ecc size: %d, oob size : %d\n",
> + chip->ecc_step, mtd->oobsize);
> + return false;
> + }
> +
> + /* The default value, see comment in the lagacy_set_geometry(). */
> + geo->metadata_size = 10;
If this not gonna change, would it be better to keep it as a macro?
> +
> + geo->ecc_chunk_count = mtd->writesize / geo->ecc_chunk_size;
> +
> + /*
> + * Now, the NAND chip with 2K page(data chunk is 512byte) shows below:
> + *
> + * | P |
> + * |<----------------------------------------------------->|
> + * | |
> + * | (Block Mark) |
> + * | P' | | | |
> + * |<-------------------------------------------->| D | | O' |
> + * | |<---->| |<--->|
> + * V V V V V
> + * +---+----------+-+----------+-+----------+-+----------+-+-----+
> + * | M | data |E| data |E| data |E| data |E| |
> + * +---+----------+-+----------+-+----------+-+----------+-+-----+
> + *
> + * P : the page size for BCH module.
> + * E : The ECC strength.
> + * G : the length of Galois Field.
> + * N : The chunk count of per page.
> + * M : the metasize of per page.
> + * C : the ecc chunk size, aka the "data" above.
> + * P': the nand chip's page size.
> + * O : the nand chip's oob size.
I am not sure if my eyes have gone bad. But I couldn't spot the 'O' in
the above NAND page diagram.
I think 's/D/O'.
Regards,
Vikram
next prev parent reply other threads:[~2013-05-15 16:31 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-15 8:40 [PATCH v5 00/11] mtd: add datasheet's ECC information to nand_chip{} Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 01/11] " Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 12:11 ` Artem Bityutskiy
2013-05-15 12:11 ` Artem Bityutskiy
2013-05-16 2:16 ` Huang Shijie
2013-05-16 2:16 ` Huang Shijie
2013-05-16 7:14 ` Artem Bityutskiy
2013-05-16 7:14 ` Artem Bityutskiy
2013-05-16 8:06 ` Huang Shijie
2013-05-16 8:06 ` Huang Shijie
2013-05-16 9:36 ` Artem Bityutskiy
2013-05-16 9:36 ` Artem Bityutskiy
2013-05-16 10:46 ` Huang Shijie
2013-05-16 10:46 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 02/11] mtd: increase max OOB size to 744 Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 12:12 ` Artem Bityutskiy
2013-05-15 12:12 ` Artem Bityutskiy
2013-05-15 8:40 ` [PATCH v5 03/11] mtd: get the ECC info from the parameter page for ONFI nand Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 17:04 ` Vikram Narayanan
2013-05-16 2:21 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 04/11] mtd: add data structures for Extended Parameter Page Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 05/11] mtd: add a helper to get the supported features for ONFI nand Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 06/11] mtd: get the ECC info from the Extended Parameter Page Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 16:57 ` Vikram Narayanan
2013-05-16 2:37 ` Huang Shijie
2013-05-16 4:42 ` [PATCH v5 fix] " Huang Shijie
2013-05-16 4:42 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 07/11] mtd: replace the hardcode with the onfi_feature() Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 08/11] mtd: add ECC info for nand_flash_dev{} Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 8:40 ` [PATCH v5 09/11] mtd: parse out the ECC info for the full-id nand chips Huang Shijie
2013-05-15 8:40 ` Huang Shijie
2013-05-15 16:54 ` Vikram Narayanan
2013-05-16 2:40 ` Huang Shijie
2013-05-15 8:54 ` [PATCH v5 10/11] mtd: add the ecc info for some " Huang Shijie
2013-05-15 8:54 ` Huang Shijie
2013-05-15 8:54 ` [PATCH v5 11/11] mtd: gpmi: set the BCH's geometry with the ecc info Huang Shijie
2013-05-15 8:54 ` Huang Shijie
2013-05-15 16:31 ` Vikram Narayanan [this message]
2013-05-16 2:46 ` Huang Shijie
2013-05-16 4:49 ` [PATCH v5 fix] " Huang Shijie
2013-05-16 4:49 ` Huang Shijie
2013-05-15 10:05 ` [PATCH v5 00/11] mtd: add datasheet's ECC information to nand_chip{} Artem Bityutskiy
2013-05-15 10:05 ` Artem Bityutskiy
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=5193B854.1030707@gmail.com \
--to=vikram186@gmail.com \
--cc=b32955@freescale.com \
--cc=linux-mtd@lists.infradead.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.