From: Boris Brezillon <boris.brezillon@collabora.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Rickard Andersson <rickaran@axis.com>,
Michal Simek <monstr@monstr.eu>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tudor Ambarus <Tudor.Ambarus@microchip.com>,
Richard Weinberger <richard@nod.at>,
linux-mtd@lists.infradead.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Naga Sureshkumar Relli <nagasure@xilinx.com>
Subject: Re: [PATCH v6 16/30] mtd: rawnand: timings: Use default values for tPROG_max and tBERS_max
Date: Fri, 29 May 2020 09:21:51 +0200 [thread overview]
Message-ID: <20200529092151.24492614@collabora.com> (raw)
In-Reply-To: <20200528231612.8958-17-miquel.raynal@bootlin.com>
On Fri, 29 May 2020 01:15:58 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> The ONFI parameter page of a chip might define more fine grained
> tPROG_max and tBERS_max. When we do not have this information, we
> default to the highest possible values (they are maxima anyway).
>
> There is no point setting these fields at runtime, so explicitly move
> these defaults to the main ONFI SDR timings structure.
And most importantly you want to do that to return a pointer to mode 0
directly :P.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
> drivers/mtd/nand/raw/nand_timings.c | 31 ++++++++++++++++++-----------
> 1 file changed, 19 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/nand_timings.c b/drivers/mtd/nand/raw/nand_timings.c
> index 728a2dee1eed..9ff4b121ab1e 100644
> --- a/drivers/mtd/nand/raw/nand_timings.c
> +++ b/drivers/mtd/nand/raw/nand_timings.c
> @@ -12,6 +12,13 @@
>
> #define ONFI_DYN_TIMING_MAX U16_MAX
>
> +/*
> + * For non-ONFI chips we use the highest possible value for tPROG and tBERS.
> + * tR and tCCS will take the default values precised in the ONFI specification
> + * for timing mode 0, respectively 200us and 500ns.
> + *
> + * These four values are tweaked to be more accurate in the case of ONFI chips.
> + */
> static const struct nand_data_interface onfi_sdr_timings[] = {
> /* Mode 0 */
> {
> @@ -20,6 +27,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
> .timings.sdr = {
> .tCCS_min = 500000,
> .tR_max = 200000000,
> + .tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> + .tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> .tADL_min = 400000,
> .tALH_min = 20000,
> .tALS_min = 50000,
> @@ -63,6 +72,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
> .timings.sdr = {
> .tCCS_min = 500000,
> .tR_max = 200000000,
> + .tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> + .tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> .tADL_min = 400000,
> .tALH_min = 10000,
> .tALS_min = 25000,
> @@ -106,6 +117,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
> .timings.sdr = {
> .tCCS_min = 500000,
> .tR_max = 200000000,
> + .tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> + .tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> .tADL_min = 400000,
> .tALH_min = 10000,
> .tALS_min = 15000,
> @@ -149,6 +162,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
> .timings.sdr = {
> .tCCS_min = 500000,
> .tR_max = 200000000,
> + .tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> + .tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> .tADL_min = 400000,
> .tALH_min = 5000,
> .tALS_min = 10000,
> @@ -192,6 +207,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
> .timings.sdr = {
> .tCCS_min = 500000,
> .tR_max = 200000000,
> + .tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> + .tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> .tADL_min = 400000,
> .tALH_min = 5000,
> .tALS_min = 10000,
> @@ -235,6 +252,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
> .timings.sdr = {
> .tCCS_min = 500000,
> .tR_max = 200000000,
> + .tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> + .tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX,
> .tADL_min = 400000,
> .tALH_min = 5000,
> .tALS_min = 10000,
> @@ -357,18 +376,6 @@ int onfi_fill_data_interface(struct nand_chip *chip,
>
> /* nanoseconds -> picoseconds */
> timings->tCCS_min = 1000UL * onfi->tCCS;
> - } else {
> - struct nand_sdr_timings *timings = &iface->timings.sdr;
> - /*
> - * For non-ONFI chips we use the highest possible value for
> - * tPROG and tBERS. tR and tCCS will take the default values
> - * precised in the ONFI specification for timing mode 0,
> - * respectively 200us and 500ns.
> - */
> -
> - /* microseconds -> picoseconds */
> - timings->tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX;
> - timings->tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX;
> }
>
> return 0;
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-05-29 7:22 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-28 23:15 [PATCH v6 00/30] Allow vendor drivers to propose their own timings Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 01/30] mtd: rawnand: Use unsigned types for nand_chip unsigned values Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 02/30] mtd: rawnand: Only use u8 instead of uint8_t in nand_chip structure Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 03/30] mtd: rawnand: Create a nand_chip operations structure Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 04/30] mtd: rawnand: Rename the manufacturer structure Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 05/30] mtd: rawnand: Declare the nand_manufacturer structure out of nand_chip Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 06/30] mtd: rawnand: Reorganize the nand_chip structure Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 07/30] mtd: rawnand: Compare the actual timing values Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 08/30] mtd: rawnand: Use the data interface mode entry when relevant Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 09/30] mtd: rawnand: Rename nand_has_setup_data_iface() Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 10/30] mtd: rawnand: Fix nand_setup_data_interface() description Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 11/30] mtd: rawnand: Rename nand_init_data_interface() Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 12/30] mtd: rawnand: timings: Update onfi_fill_data_interface() kernel doc Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 13/30] mtd: rawnand: timings: Provide onfi_fill_data_interface() with a data interface Miquel Raynal
2020-05-29 7:16 ` Boris Brezillon
2020-05-28 23:15 ` [PATCH v6 14/30] mtd: rawnand: timings: Add a helper to find the closest ONFI mode Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 15/30] mtd: rawnand: timings: Avoid redefining tR_max and tCCS_min Miquel Raynal
2020-05-28 23:15 ` [PATCH v6 16/30] mtd: rawnand: timings: Use default values for tPROG_max and tBERS_max Miquel Raynal
2020-05-29 7:21 ` Boris Brezillon [this message]
2020-05-28 23:15 ` [PATCH v6 17/30] mtd: rawnand: s/data_interface/interface_config/ Miquel Raynal
2020-05-29 7:44 ` Boris Brezillon
2020-05-29 7:47 ` Boris Brezillon
2020-05-29 8:11 ` Boris Brezillon
2020-05-29 8:19 ` Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 18/30] mtd: rawnand: timings: Make onfi_fill_interface_config() a void helper Miquel Raynal
2020-05-29 7:27 ` Boris Brezillon
2020-05-28 23:16 ` [PATCH v6 19/30] mtd: rawnand: Define a unique reset interface configuration Miquel Raynal
2020-05-29 7:32 ` Boris Brezillon
2020-05-29 9:27 ` Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 20/30] mtd: rawnand: marvell: Use a helper to access the timings Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 21/30] mtd: rawnand: legacy: " Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 22/30] mtd: rawnand: Hide the chip->interface_config indirection Miquel Raynal
2020-05-29 7:37 ` Boris Brezillon
2020-05-28 23:16 ` [PATCH v6 23/30] mtd: rawnand: Introduce nand_choose_best_sdr_timings() Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 24/30] mtd: rawnand: Add the ->choose_interface() hook Miquel Raynal
2020-05-29 7:42 ` Boris Brezillon
2020-05-28 23:16 ` [PATCH v6 25/30] mtd: rawnand: toshiba: Implement ->choose_interface() for TC58TEG5DCLTA00 Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 26/30] mtd: rawnand: toshiba: Implement ->choose_interface() for TC58NVG0S3E Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 27/30] mtd: rawnand: hynix: Implement ->choose_interface() for H27UCG8T2ATR-BC Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 28/30] mtd: rawnand: toshiba: Choose the data interface for TH58NVG2S3HBAI4 Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 29/30] mtd: rawnand: Get rid of the default ONFI timing mode Miquel Raynal
2020-05-28 23:16 ` [PATCH v6 30/30] mtd: rawnand: Allocate the best interface configuration dynamically Miquel Raynal
2020-05-29 8:54 ` Boris Brezillon
2020-05-29 9:16 ` Miquel Raynal
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=20200529092151.24492614@collabora.com \
--to=boris.brezillon@collabora.com \
--cc=Tudor.Ambarus@microchip.com \
--cc=linux-mtd@lists.infradead.org \
--cc=miquel.raynal@bootlin.com \
--cc=monstr@monstr.eu \
--cc=nagasure@xilinx.com \
--cc=richard@nod.at \
--cc=rickaran@axis.com \
--cc=thomas.petazzoni@bootlin.com \
--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;
as well as URLs for NNTP newsgroup(s).