From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Maxim Anisimov <maxim.anisimov.ua@gmail.com>
Cc: Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Martin Kurbanov <mmkurbanov@salutedevices.com>,
Michael Walle <michael@walle.cc>, Mark Brown <broonie@kernel.org>,
"Chia-Lin Kao (AceLan)" <acelan.kao@canonical.com>,
linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org
Subject: Re: [PATCH] mtd: spinand: Add support for HeYangTek HYF1GQ4UDACAE
Date: Fri, 23 Aug 2024 17:47:23 +0200 [thread overview]
Message-ID: <20240823174723.403a3342@xps-13> (raw)
In-Reply-To: <3d14b0c8-3c25-4a9a-b84a-192f071fa919@gmail.com>
Hi Maxim,
maxim.anisimov.ua@gmail.com wrote on Mon, 22 Jul 2024 09:54:55 +0300:
> Hi Miquel,
>
> Sorry for late answer. I was on vocation. To be honest, I don't understand very well how this works. One of the OpenWrt developers asked me to send this patch to Linux upstream. Related OpenWrt pull request is here https://github.com/openwrt/openwrt/pull/15551 . Originally this patch code was taken from the device manufacturer's repository https://github.com/keenetic/kernel-49/commit/bacade569fb12bc0ad31ba09bca9b890118fbca7 . I pointed to this in the source code. From my side I only adapted the code for successful compilation on the Linux upstream. It's difficult for me to answer your questions because I don't understand how the spi nand framework works. I can make corrections in the patch but with outside help. Thanks!
I'm sorry I cannot write the changes for you, but I can explain my
point below.
> >> +static int hyfxgq4uda_ooblayout_ecc(struct mtd_info *mtd, int section,
> >> + struct mtd_oob_region *region)
> >> +{
> >> + if (section > 3)
> >> + return -ERANGE;
> >> +
> >> + region->offset = section * 16 + 8;
> >> + region->length = 8;
> > This is: 8-15, 24-31, 40-47, 56-62
> >
> >> +
> >> + return 0;
> >> +}
> >> +
> >> +static int hyfxgq4uda_ooblayout_free(struct mtd_info *mtd, int section,
> >> + struct mtd_oob_region *region)
> >> +{
> >> + if (section > 3)
> >> + return -ERANGE;
> >> +
> >> + /* ECC-protected user meta-data */
> >> + region->offset = section * 16 + 4;
> >> + region->length = 4;
> > This is: 4-7, 20-23, 32-35, 48-51
> >
> > So what about 2-4, 16-19, 36-39, 52-55, 63-64 ?
The OOB area is a specific area where we store:
- the bad block marker: it is at offset 0 and 1 and must be excluded
from both functions.
- ECC bytes, so data for the correction engine: the amount depend on
the strength of your correction and the position depends on the
hardware. If this is not told in the datasheet explicitly you can
play with flash_erase/nandwrite/nanddump: you can write a known
pattern to an OOB area with the ECC engine enabled and you'll see
what bytes have been smashed by the ECC engine.
- the rest is user data (typically jffs2 metadata).
In the current implementation, some bytes are just undefined, which is
not expected.
> >
> >> +
> >> + return 0;
> >> +}
...
> >> +static int hyfxgq4uda_ecc_get_status(struct spinand_device *spinand,
> >> + u8 status)
> >> +{
> >> + struct nand_device *nand = spinand_to_nand(spinand);
> >> +
> >> + switch (status & STATUS_ECC_MASK) {
> >> + case STATUS_ECC_NO_BITFLIPS:
> >> + return 0;
> >> +
> >> + case STATUS_ECC_UNCOR_ERROR:
> >> + return -EBADMSG;
> >> +
> >> + case STATUS_ECC_HAS_BITFLIPS:
> >> + return nanddev_get_ecc_conf(nand)->strength >> 1;
> > Maybe an explanation of this line is needed. Is this just guessing or
> > is this defined in the datasheet?
The datasheet should tell you what this bit means. If it means some
bits have been corrected up to half of the strength capability, then
this is fine. But please make sure this is right by using nandbiterrs
-i from the mtd-utils test suite.
> > Also please do not use shifts when you want to divide. Just use / 2
> > which is easier to understand. Compilers know how to optimize that.
This is self explanatory.
Thanks,
Miquèl
prev parent reply other threads:[~2024-08-23 15:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-24 6:12 [PATCH] mtd: spinand: Add support for HeYangTek HYF1GQ4UDACAE Maxim Anisimov
2024-07-01 7:59 ` Miquel Raynal
2024-07-22 6:54 ` Maxim Anisimov
2024-08-23 15:47 ` Miquel Raynal [this message]
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=20240823174723.403a3342@xps-13 \
--to=miquel.raynal@bootlin.com \
--cc=acelan.kao@canonical.com \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=maxim.anisimov.ua@gmail.com \
--cc=michael@walle.cc \
--cc=mmkurbanov@salutedevices.com \
--cc=richard@nod.at \
--cc=vigneshr@ti.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