All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@collabora.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Rickard Andersson <rickaran@axis.com>,
	Richard Weinberger <richard@nod.at>,
	linux-mtd@lists.infradead.org,
	Vignesh Raghavendra <vigneshr@ti.com>,
	Tudor Ambarus <Tudor.Ambarus@microchip.com>
Subject: Re: [PATCH v4 06/19] mtd: rawnand: Reorganize the nand_chip structure
Date: Mon, 25 May 2020 20:55:08 +0200	[thread overview]
Message-ID: <20200525205335.15da52a4@collabora.com> (raw)
In-Reply-To: <20200525174239.11349-7-miquel.raynal@bootlin.com>

On Mon, 25 May 2020 19:42:26 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> Reorder fields in this structure and pack entries by theme:
> * The main descriptive structures
> * The data interface details
> * Bad block information
> * The device layout
> * Extra buffers matching the device layout
> * Internal values
> * External objects like the ECC controller, the ECC engine and a
>   private data pointer.
> 
> While at it, adapt the documentation style.
> 
> I changed on purpose the description of @oob_poi which was weird.

Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>

Just like patch 1 and 2, I'm not opposed to this patch, but I feel we're
spending time on something that's expected to be removed soon.

> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  include/linux/mtd/rawnand.h | 166 +++++++++++++++++-------------------
>  1 file changed, 76 insertions(+), 90 deletions(-)
> 
> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> index 2a9b5d5b315b..622da6527a36 100644
> --- a/include/linux/mtd/rawnand.h
> +++ b/include/linux/mtd/rawnand.h
> @@ -1055,120 +1055,106 @@ struct nand_manufacturer {
>  
>  /**
>   * struct nand_chip - NAND Private Flash Chip Data
> - * @base:		Inherit from the generic NAND device
> - * @ops:		NAND chip operations
> - * @manufacturer:	Manufacturer information
> - * @legacy:		All legacy fields/hooks. If you develop a new driver,
> - *			don't even try to use any of these fields/hooks, and if
> - *			you're modifying an existing driver that is using those
> - *			fields/hooks, you should consider reworking the driver
> - *			avoid using them.
> - * @ecc:		[BOARDSPECIFIC] ECC control structure
> - * @buf_align:		minimum buffer alignment required by a platform
> - * @oob_poi:		"poison value buffer," used for laying out OOB data
> - *			before writing
> - * @page_shift:		[INTERN] number of address bits in a page (column
> - *			address bits).
> - * @phys_erase_shift:	[INTERN] number of address bits in a physical eraseblock
> - * @bbt_erase_shift:	[INTERN] number of address bits in a bbt entry
> - * @chip_shift:		[INTERN] number of address bits in one chip
> - * @options:		[BOARDSPECIFIC] various chip options. They can partly
> - *			be set to inform nand_scan about special functionality.
> - *			See the defines for further explanation.
> - * @bbt_options:	[INTERN] bad block specific options. All options used
> - *			here must come from bbm.h. By default, these options
> - *			will be copied to the appropriate nand_bbt_descr's.
> - * @badblockpos:	[INTERN] position of the bad block marker in the oob
> - *			area.
> - * @badblockbits:	[INTERN] minimum number of set bits in a good block's
> - *			bad block marker position; i.e., BBM == 11110111b is
> - *			not bad when badblockbits == 7
> - * @onfi_timing_mode_default: [INTERN] default ONFI timing mode. This field is
> - *			      set to the actually used ONFI mode if the chip is
> - *			      ONFI compliant or deduced from the datasheet if
> - *			      the NAND chip is not ONFI compliant.
> - * @pagemask:		[INTERN] page number mask = number of (pages / chip) - 1
> - * @data_buf:		[INTERN] buffer for data, size is (page size + oobsize).
> - * @pagecache:		Structure containing page cache related fields
> - * @pagecache.bitflips:	Number of bitflips of the cached page
> - * @pagecache.page:	Page number currently in the cache. -1 means no page is
> - *			currently cached
> - * @subpagesize:	[INTERN] holds the subpagesize
> - * @id:			[INTERN] holds NAND ID
> - * @parameters:		[INTERN] holds generic parameters under an easily
> - *			readable form.
> - * @data_interface:	[INTERN] NAND interface timing information
> - * @cur_cs:		currently selected target. -1 means no target selected,
> - *			otherwise we should always have cur_cs >= 0 &&
> - *			cur_cs < nanddev_ntargets(). NAND Controller drivers
> - *			should not modify this value, but they're allowed to
> - *			read it.
> - * @read_retries:	[INTERN] the number of read retry modes supported
> - * @lock:		lock protecting the suspended field. Also used to
> - *			serialize accesses to the NAND device.
> - * @suspended:		set to 1 when the device is suspended, 0 when it's not.
> - * @bbt:		[INTERN] bad block table pointer
> - * @bbt_td:		[REPLACEABLE] bad block table descriptor for flash
> - *			lookup.
> - * @bbt_md:		[REPLACEABLE] bad block table mirror descriptor
> - * @badblock_pattern:	[REPLACEABLE] bad block scan pattern used for initial
> - *			bad block scan.
> - * @controller:		[REPLACEABLE] a pointer to a hardware controller
> - *			structure which is shared among multiple independent
> - *			devices.
> - * @priv:		[OPTIONAL] pointer to private chip data
> + * @base: Inherit from the generic NAND device
> + * @id: Holds NAND ID
> + * @parameters: Holds generic parameters under an easily readable form
> + * @manufacturer: Manufacturer information
> + * @ops: NAND chip operations
> + * @legacy: All legacy fields/hooks. If you develop a new driver, don't even try
> + *          to use any of these fields/hooks, and if you're modifying an
> + *          existing driver that is using those fields/hooks, you should
> + *          consider reworking the driver and avoid using them.
> + * @options: Various chip options. They can partly be set to inform nand_scan
> + *           about special functionality. See the defines for further
> + *           explanation.
> + * @onfi_timing_mode_default: Default ONFI timing mode. This field is set to the
> + *			      actually used ONFI mode if the chip is ONFI
> + *			      compliant or deduced from the datasheet otherwise
> + * @data_interface: NAND interface timing information
> + * @bbt_erase_shift: Number of address bits in a bbt entry
> + * @bbt_options: Bad block table specific options. All options used here must
> + *               come from bbm.h. By default, these options will be copied to
> + *               the appropriate nand_bbt_descr's.
> + * @badblockpos: Bad block marker position in the oob area
> + * @badblockbits: Minimum number of set bits in a good block's bad block marker
> + *                position; i.e., BBM = 11110111b is good when badblockbits = 7
> + * @bbt_td: Bad block table descriptor for flash lookup
> + * @bbt_md: Bad block table mirror descriptor
> + * @badblock_pattern: Bad block scan pattern used for initial bad block scan
> + * @bbt: Bad block table pointer
> + * @page_shift: Number of address bits in a page (column address bits)
> + * @phys_erase_shift: Number of address bits in a physical eraseblock
> + * @chip_shift: Number of address bits in one chip
> + * @pagemask: Page number mask = number of (pages / chip) - 1
> + * @subpagesize: Holds the subpagesize
> + * @data_buf: Buffer for data, size is (page size + oobsize)
> + * @oob_poi: pointer on the OOB area covered by data_buf
> + * @pagecache: Structure containing page cache related fields
> + * @pagecache.bitflips: Number of bitflips of the cached page
> + * @pagecache.page: Page number currently in the cache. -1 means no page is
> + *                  currently cached
> + * @buf_align: Minimum buffer alignment required by a platform
> + * @lock: Lock protecting the suspended field. Also used to serialize accesses
> + *        to the NAND device
> + * @suspended: Set to 1 when the device is suspended, 0 when it's not
> + * @cur_cs: Currently selected target. -1 means no target selected, otherwise we
> + *          should always have cur_cs >= 0 && cur_cs < nanddev_ntargets().
> + *          NAND Controller drivers should not modify this value, but they're
> + *          allowed to read it.
> + * @read_retries: The number of read retry modes supported
> + * @controller: The hardware controller	structure which is shared among multiple
> + *              independent devices
> + * @ecc: The ECC controller structure
> + * @priv: Chip private data
>   */
> -
>  struct nand_chip {
>  	struct nand_device base;
> +	struct nand_id id;
> +	struct nand_parameters parameters;
>  	struct nand_manufacturer manufacturer;
>  	struct nand_chip_ops ops;
>  	struct nand_legacy legacy;
> -
>  	unsigned int options;
> +
> +	/* Data interface */
> +	int onfi_timing_mode_default;
> +	struct nand_data_interface data_interface;
> +
> +	/* Bad block information */
> +	unsigned int bbt_erase_shift;
>  	unsigned int bbt_options;
> +	unsigned int badblockpos;
> +	unsigned int badblockbits;
> +	struct nand_bbt_descr *bbt_td;
> +	struct nand_bbt_descr *bbt_md;
> +	struct nand_bbt_descr *badblock_pattern;
> +	u8 *bbt;
>  
> +	/* Device internal layout */
>  	unsigned int page_shift;
>  	unsigned int phys_erase_shift;
> -	unsigned int bbt_erase_shift;
>  	unsigned int chip_shift;
>  	unsigned int pagemask;
> +	unsigned int subpagesize;
> +
> +	/* Buffers */
>  	u8 *data_buf;
> -
> +	u8 *oob_poi;
>  	struct {
>  		unsigned int bitflips;
>  		int page;
>  	} pagecache;
> +	unsigned long buf_align;
>  
> -	unsigned int subpagesize;
> -	int onfi_timing_mode_default;
> -	unsigned int badblockpos;
> -	unsigned int badblockbits;
> -
> -	struct nand_id id;
> -	struct nand_parameters parameters;
> -
> -	struct nand_data_interface data_interface;
> -
> +	/* Internals */
> +	struct mutex lock;
> +	unsigned int suspended : 1;
>  	int cur_cs;
> -
>  	int read_retries;
>  
> -	struct mutex lock;
> -	unsigned int suspended : 1;
> -
> -	u8 *oob_poi;
> +	/* Externals */
>  	struct nand_controller *controller;
> -
>  	struct nand_ecc_ctrl ecc;
> -	unsigned long buf_align;
> -
> -	u8 *bbt;
> -	struct nand_bbt_descr *bbt_td;
> -	struct nand_bbt_descr *bbt_md;
> -
> -	struct nand_bbt_descr *badblock_pattern;
> -
>  	void *priv;
>  };
>  


______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

  reply	other threads:[~2020-05-25 18:55 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-25 17:42 [PATCH v4 00/19] Allow vendor drivers to propose their own timings Miquel Raynal
2020-05-25 17:42 ` [PATCH v4 01/19] mtd: rawnand: Use unsigned types for nand_chip unsigned values Miquel Raynal
2020-05-25 18:33   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 02/19] mtd: rawnand: Only use u8 instead of uint8_t in nand_chip structure Miquel Raynal
2020-05-25 18:36   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 03/19] mtd: rawnand: Create a nand_chip operations structure Miquel Raynal
2020-05-25 18:37   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 04/19] mtd: rawnand: Rename the manufacturer structure Miquel Raynal
2020-05-25 18:38   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 05/19] mtd: rawnand: Declare the nand_manufacturer structure out of nand_chip Miquel Raynal
2020-05-25 18:40   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 06/19] mtd: rawnand: Reorganize the nand_chip structure Miquel Raynal
2020-05-25 18:55   ` Boris Brezillon [this message]
2020-05-25 17:42 ` [PATCH v4 07/19] mtd: rawnand: Compare the actual timing values Miquel Raynal
2020-05-25 19:01   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 08/19] mtd: rawnand: Rename onfi_timing_mode_default Miquel Raynal
2020-05-25 19:07   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 09/19] mtd: rawnand: Use the data interface mode entry when relevant Miquel Raynal
2020-05-25 19:09   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 10/19] mtd: rawnand: Rename nand_has_setup_data_interface() Miquel Raynal
2020-05-25 19:10   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 11/19] mtd: rawnand: Fix nand_setup_data_interface() description Miquel Raynal
2020-05-25 19:13   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 12/19] mtd: rawnand: Rename nand_init_data_interface() Miquel Raynal
2020-05-25 19:17   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 13/19] mtd: rawnand: timings: Update onfi_fill_data_interface() kernel doc Miquel Raynal
2020-05-25 19:18   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 14/19] mtd: rawnand: timings: Provide onfi_fill_data_interface() with a data interface Miquel Raynal
2020-05-25 19:26   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 15/19] mtd: rawnand: timings: Add a helper to find the closest ONFI mode Miquel Raynal
2020-05-25 19:30   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 16/19] mtd: rawnand: Introduce nand_choose_best_sdr_iface() Miquel Raynal
2020-05-25 19:47   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 17/19] mtd: rawnand: Introduce nand_choose_best_vendor_sdr_iface() Miquel Raynal
2020-05-25 19:45   ` Boris Brezillon
2020-05-26  9:35     ` SV: " Rickard X Andersson
2020-05-26  9:46       ` Miquel Raynal
2020-05-26 10:10         ` SV: " Rickard X Andersson
2020-05-26 10:43           ` Miquel Raynal
2020-05-26 11:42             ` SV: " Rickard X Andersson
2020-05-25 17:42 ` [PATCH v4 18/19] mtd: rawnand: Add the ->choose_data_interface() hook Miquel Raynal
2020-05-25 19:51   ` Boris Brezillon
2020-05-25 17:42 ` [PATCH v4 19/19] mtd: rawnand: Add timings for Kioxia TH58NVG2S3HBAI4 Miquel Raynal
2020-05-25 19:53   ` 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=20200525205335.15da52a4@collabora.com \
    --to=boris.brezillon@collabora.com \
    --cc=Tudor.Ambarus@microchip.com \
    --cc=linux-mtd@lists.infradead.org \
    --cc=miquel.raynal@bootlin.com \
    --cc=richard@nod.at \
    --cc=rickaran@axis.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 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.