linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: LiuShuo <b35362@freescale.com>
To: Scott Wood <scottwood@freescale.com>
Cc: Artem.Bityutskiy@nokia.com, linuxppc-dev@lists.ozlabs.org,
	linux-kernel@vger.kernel.org, shuo.liu@freescale.com,
	linux-mtd@lists.infradead.org, akpm@linux-foundation.org,
	dwmw2@infradead.org
Subject: Re: [PATCH 3/3] mtd/nand : workaround for Freescale FCM to support large-page Nand chip
Date: Thu, 8 Dec 2011 18:44:54 +0800	[thread overview]
Message-ID: <4EE09526.5040705@freescale.com> (raw)
In-Reply-To: <4EDFBA6D.9080500@freescale.com>

=E4=BA=8E 2011=E5=B9=B412=E6=9C=8808=E6=97=A5 03:11, Scott Wood =E5=86=99=
=E9=81=93:
> On 12/06/2011 09:55 PM, LiuShuo wrote:
>> =E4=BA=8E 2011=E5=B9=B412=E6=9C=8807=E6=97=A5 08:09, Scott Wood =E5=86=
=99=E9=81=93:
>>> On 12/03/2011 10:31 PM, shuo.liu@freescale.com wrote:
>>>> From: Liu Shuo<shuo.liu@freescale.com>
>>>>
>>>> Freescale FCM controller has a 2K size limitation of buffer RAM. In
>>>> order
>>>> to support the Nand flash chip whose page size is larger than 2K byt=
es,
>>>> we read/write 2k data repeatedly by issuing FIR_OP_RB/FIR_OP_WB and =
save
>>>> them to a large buffer.
>>>>
>>>> Signed-off-by: Liu Shuo<shuo.liu@freescale.com>
>>>> ---
>>>> v3:
>>>>       -remove page_size of struct fsl_elbc_mtd.
>>>>       -do a oob write by NAND_CMD_RNDIN.
>>>>
>>>>    drivers/mtd/nand/fsl_elbc_nand.c |  243
>>>> ++++++++++++++++++++++++++++++++++----
>>>>    1 files changed, 218 insertions(+), 25 deletions(-)
>>> What is the plan for bad block marker migration?
>> This patch has been ported to uboot now, I think we can make a special
>> uboot image for bad
>> block marker migration when first use the chip.
> It should not be a special image, and there should be some way to mark
> that the migration has happened.  Even if we do the migration in U-Boot=
,
> Linux could check for the marker and if absent, disallow access and tel=
l
> the user to run the migration tool.
>
>>>> @@ -473,13 +568,72 @@ static void fsl_elbc_cmdfunc(struct mtd_info
>>>> *mtd, unsigned int command,
>>>>             * write so the HW generates the ECC.
>>>>             */
>>>>            if (elbc_fcm_ctrl->oob || elbc_fcm_ctrl->column !=3D 0 ||
>>>> -            elbc_fcm_ctrl->index !=3D mtd->writesize + mtd->oobsize=
)
>>>> -            out_be32(&lbc->fbcr,
>>>> -                elbc_fcm_ctrl->index - elbc_fcm_ctrl->column);
>>>> -        else
>>>> +            elbc_fcm_ctrl->index !=3D mtd->writesize + mtd->oobsize=
) {
>>>> +            if (elbc_fcm_ctrl->oob&&   mtd->writesize>   2048) {
>>>> +                out_be32(&lbc->fbcr, 64);
>>>> +            } else {
>>>> +                out_be32(&lbc->fbcr, elbc_fcm_ctrl->index
>>>> +                        - elbc_fcm_ctrl->column);
>>>> +            }
>>> We need to limit ourselves to the regions that have actually been
>>> written to in the buffer.  fbcr needs to be set separately for first =
and
>>> last subpages, with intermediate subpages having 0, 64, or 2112 as
>>> appropriate.  Subpages that are entirely before column or entirely af=
ter
>>> column + index should be skipped.
>> I have considered this case, but I don't think it is useful.
>>      1.There isn't a 'length' parameter in driver interface, although =
we
>> can get it from 'index - column'.
> Right.  column is start, and index is end + 1.  We have the bounds of
> what has been written.
>
>>      2.To see nand_do_write_oob() in nand_base.c, it fill '0xff' to
>> entire oob area first and write the user data by nand_fill_oob(), then
>> call ecc.write_oob (default is nand_write_oob_std()).
> Do we really want to assume that that's what it will always do?
>
> And if we do want to make such assumptions, we could rip out all usage
> of index/column here, and just handle "oob" and "full page" cases.
The function nand_do_write_ops() in nandbase.c is a Nand internal interfa=
ce.
It always is called when application write to nand flash. (e.g. dd)
In this function, partial page write is dealt with by filling '0xff' to=20
buffer before data copy.
(nand_do_write_oob() is similar)
So I don't think we need to do it in our controller driver again, it=20
should be a job of upper layer.


I found that 'column' for NAND_CMD_SEQIN is always 0 or writesize except=20
for oob write with
  NAND_ECC_HW_SYNDROME, but it's not useful case for our controller.

-LiuShuo
> -Scott

  reply	other threads:[~2011-12-08 10:41 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-04  4:31 [PATCH 1/3] mtd/nand : use elbc_fcm_ctrl->oob to set FPAR_MS bit of FPAR shuo.liu
2011-12-04  4:31 ` [PATCH 2/3] mtd/nand : set correct length to FBCR for a non-full-page write shuo.liu
2011-12-04  4:31 ` [PATCH 3/3] mtd/nand : workaround for Freescale FCM to support large-page Nand chip shuo.liu
2011-12-05  6:47   ` Artem Bityutskiy
2011-12-05 19:46     ` Scott Wood
2011-12-06 11:49       ` Artem Bityutskiy
2011-12-06 11:49   ` Artem Bityutskiy
2011-12-07  0:09   ` Scott Wood
2011-12-07  3:55     ` LiuShuo
2011-12-07 19:11       ` Scott Wood
2011-12-08 10:44         ` LiuShuo [this message]
2011-12-08 18:43           ` Scott Wood
2011-12-12 21:09     ` Artem Bityutskiy
2011-12-12 21:15       ` Scott Wood
2011-12-12 21:19         ` Artem Bityutskiy
2011-12-12 21:30           ` Scott Wood
2011-12-13  2:46             ` LiuShuo
2011-12-14  8:41               ` LiuShuo
2011-12-14 20:15                 ` Scott Wood
2011-12-15  4:59                   ` Li Yang
2011-12-15 17:32                     ` Scott Wood
2011-12-16  2:44                   ` LiuShuo
2011-12-16 17:59                     ` Scott Wood
2011-12-19 11:05                       ` Li Yang
2011-12-19 16:47                         ` Scott Wood
2011-12-20  9:08                           ` Li Yang
2011-12-20 19:48                             ` Scott Wood
2011-12-17 14:35             ` Artem Bityutskiy
2011-12-19 18:38               ` Scott Wood
2011-12-19 18:42                 ` Scott Wood
2011-12-14  3:41       ` LiuShuo
2011-12-14 20:53         ` Scott Wood
2011-12-05  6:50 ` [PATCH 1/3] mtd/nand : use elbc_fcm_ctrl->oob to set FPAR_MS bit of FPAR Artem Bityutskiy
  -- strict thread matches above, loose matches on Subject: below --
2011-11-24  0:41 b35362
2011-11-24  0:41 ` [PATCH 3/3] mtd/nand : workaround for Freescale FCM to support large-page Nand chip b35362
2011-11-24  7:37   ` Li Yang-R58472
2011-11-28 17:20     ` Scott Wood
2011-11-24  7:41   ` Artem Bityutskiy
2011-11-24  7:49     ` Li Yang-R58472
2011-11-24  8:16       ` Artem Bityutskiy
2011-11-24 10:02         ` LiuShuo
2011-11-24 11:07           ` Artem Bityutskiy
2011-11-28 21:48   ` Scott Wood
2011-11-28 21:49     ` Scott Wood

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=4EE09526.5040705@freescale.com \
    --to=b35362@freescale.com \
    --cc=Artem.Bityutskiy@nokia.com \
    --cc=akpm@linux-foundation.org \
    --cc=dwmw2@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=scottwood@freescale.com \
    --cc=shuo.liu@freescale.com \
    /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;
as well as URLs for NNTP newsgroup(s).