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/
next prev parent 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 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).