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 03/19] mtd: rawnand: Create a nand_chip operations structure
Date: Mon, 25 May 2020 20:37:00 +0200 [thread overview]
Message-ID: <20200525203700.249af5a3@collabora.com> (raw)
In-Reply-To: <20200525174239.11349-4-miquel.raynal@bootlin.com>
On Mon, 25 May 2020 19:42:23 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> And move nand_chip hooks there.
>
> While moving entries from one structure to the other, adapt the
> documentation style.
>
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
> ---
> drivers/mtd/nand/raw/nand_base.c | 20 ++++++++---------
> drivers/mtd/nand/raw/nand_hynix.c | 2 +-
> drivers/mtd/nand/raw/nand_macronix.c | 10 ++++-----
> drivers/mtd/nand/raw/nand_micron.c | 2 +-
> include/linux/mtd/rawnand.h | 32 ++++++++++++++++------------
> 5 files changed, 35 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> index 6a6a0a36b3fd..b86f641f6d74 100644
> --- a/drivers/mtd/nand/raw/nand_base.c
> +++ b/drivers/mtd/nand/raw/nand_base.c
> @@ -3285,10 +3285,10 @@ static int nand_setup_read_retry(struct nand_chip *chip, int retry_mode)
> if (retry_mode >= chip->read_retries)
> return -EINVAL;
>
> - if (!chip->setup_read_retry)
> + if (!chip->ops.setup_read_retry)
> return -EOPNOTSUPP;
>
> - return chip->setup_read_retry(chip, retry_mode);
> + return chip->ops.setup_read_retry(chip, retry_mode);
> }
>
> static void nand_wait_readrdy(struct nand_chip *chip)
> @@ -4532,8 +4532,8 @@ static int nand_suspend(struct mtd_info *mtd)
> int ret = 0;
>
> mutex_lock(&chip->lock);
> - if (chip->suspend)
> - ret = chip->suspend(chip);
> + if (chip->ops.suspend)
> + ret = chip->ops.suspend(chip);
> if (!ret)
> chip->suspended = 1;
> mutex_unlock(&chip->lock);
> @@ -4551,8 +4551,8 @@ static void nand_resume(struct mtd_info *mtd)
>
> mutex_lock(&chip->lock);
> if (chip->suspended) {
> - if (chip->resume)
> - chip->resume(chip);
> + if (chip->ops.resume)
> + chip->ops.resume(chip);
> chip->suspended = 0;
> } else {
> pr_err("%s called for a chip which is not in suspended state\n",
> @@ -4581,10 +4581,10 @@ static int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
> {
> struct nand_chip *chip = mtd_to_nand(mtd);
>
> - if (!chip->lock_area)
> + if (!chip->ops.lock_area)
> return -ENOTSUPP;
>
> - return chip->lock_area(chip, ofs, len);
> + return chip->ops.lock_area(chip, ofs, len);
> }
>
> /**
> @@ -4597,10 +4597,10 @@ static int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
> {
> struct nand_chip *chip = mtd_to_nand(mtd);
>
> - if (!chip->unlock_area)
> + if (!chip->ops.unlock_area)
> return -ENOTSUPP;
>
> - return chip->unlock_area(chip, ofs, len);
> + return chip->ops.unlock_area(chip, ofs, len);
> }
>
> /* Set default functions */
> diff --git a/drivers/mtd/nand/raw/nand_hynix.c b/drivers/mtd/nand/raw/nand_hynix.c
> index 7caedaa5b9e5..7d1be53f27f3 100644
> --- a/drivers/mtd/nand/raw/nand_hynix.c
> +++ b/drivers/mtd/nand/raw/nand_hynix.c
> @@ -337,7 +337,7 @@ static int hynix_mlc_1xnm_rr_init(struct nand_chip *chip,
> rr->nregs = nregs;
> rr->regs = hynix_1xnm_mlc_read_retry_regs;
> hynix->read_retry = rr;
> - chip->setup_read_retry = hynix_nand_setup_read_retry;
> + chip->ops.setup_read_retry = hynix_nand_setup_read_retry;
> chip->read_retries = nmodes;
>
> out:
> diff --git a/drivers/mtd/nand/raw/nand_macronix.c b/drivers/mtd/nand/raw/nand_macronix.c
> index 09c254c97b5c..1472f925f386 100644
> --- a/drivers/mtd/nand/raw/nand_macronix.c
> +++ b/drivers/mtd/nand/raw/nand_macronix.c
> @@ -130,7 +130,7 @@ static void macronix_nand_onfi_init(struct nand_chip *chip)
> return;
>
> chip->read_retries = MACRONIX_NUM_READ_RETRY_MODES;
> - chip->setup_read_retry = macronix_nand_setup_read_retry;
> + chip->ops.setup_read_retry = macronix_nand_setup_read_retry;
>
> if (p->supports_set_get_features) {
> bitmap_set(p->set_feature_list,
> @@ -242,8 +242,8 @@ static void macronix_nand_block_protection_support(struct nand_chip *chip)
> bitmap_set(chip->parameters.set_feature_list,
> ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
>
> - chip->lock_area = mxic_nand_lock;
> - chip->unlock_area = mxic_nand_unlock;
> + chip->ops.lock_area = mxic_nand_lock;
> + chip->ops.unlock_area = mxic_nand_unlock;
> }
>
> static int nand_power_down_op(struct nand_chip *chip)
> @@ -312,8 +312,8 @@ static void macronix_nand_deep_power_down_support(struct nand_chip *chip)
> if (i < 0)
> return;
>
> - chip->suspend = mxic_nand_suspend;
> - chip->resume = mxic_nand_resume;
> + chip->ops.suspend = mxic_nand_suspend;
> + chip->ops.resume = mxic_nand_resume;
> }
>
> static int macronix_nand_init(struct nand_chip *chip)
> diff --git a/drivers/mtd/nand/raw/nand_micron.c b/drivers/mtd/nand/raw/nand_micron.c
> index 3589b4fce0d4..4385092a9325 100644
> --- a/drivers/mtd/nand/raw/nand_micron.c
> +++ b/drivers/mtd/nand/raw/nand_micron.c
> @@ -84,7 +84,7 @@ static int micron_nand_onfi_init(struct nand_chip *chip)
> struct nand_onfi_vendor_micron *micron = (void *)p->onfi->vendor;
>
> chip->read_retries = micron->read_retry_options;
> - chip->setup_read_retry = micron_nand_setup_read_retry;
> + chip->ops.setup_read_retry = micron_nand_setup_read_retry;
> }
>
> if (p->supports_set_get_features) {
> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> index 7d62e0e719ac..b33cd68852c4 100644
> --- a/include/linux/mtd/rawnand.h
> +++ b/include/linux/mtd/rawnand.h
> @@ -1027,16 +1027,31 @@ struct nand_legacy {
> struct nand_controller dummy_controller;
> };
>
> +/**
> + * struct nand_chip_ops - NAND chip operations
> + * @suspend: Suspend operation
> + * @resume: Resume operation
> + * @lock_area: Lock operation
> + * @unlock_area: Unlock operation
> + * @setup_read_retry: Set the read-retry mode (mostly needed for MLC NANDs)
> + */
> +struct nand_chip_ops {
> + int (*suspend)(struct nand_chip *chip);
> + void (*resume)(struct nand_chip *chip);
> + int (*lock_area)(struct nand_chip *chip, loff_t ofs, uint64_t len);
> + int (*unlock_area)(struct nand_chip *chip, loff_t ofs, uint64_t len);
> + int (*setup_read_retry)(struct nand_chip *chip, int retry_mode);
> +};
> +
> /**
> * struct nand_chip - NAND Private Flash Chip Data
> * @base: Inherit from the generic NAND device
> + * @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
> * avoid using them.
> - * @setup_read_retry: [FLASHSPECIFIC] flash (vendor) specific function for
> - * setting the read-retry mode. Mostly needed for MLC NAND.
> * @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
> @@ -1081,8 +1096,6 @@ struct nand_legacy {
> * @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.
> - * @suspend: [REPLACEABLE] specific NAND device suspend operation
> - * @resume: [REPLACEABLE] specific NAND device resume operation
> * @bbt: [INTERN] bad block table pointer
> * @bbt_td: [REPLACEABLE] bad block table descriptor for flash
> * lookup.
> @@ -1096,17 +1109,13 @@ struct nand_legacy {
> * @manufacturer: [INTERN] Contains manufacturer information
> * @manufacturer.desc: [INTERN] Contains manufacturer's description
> * @manufacturer.priv: [INTERN] Contains manufacturer private information
> - * @lock_area: [REPLACEABLE] specific NAND chip lock operation
> - * @unlock_area: [REPLACEABLE] specific NAND chip unlock operation
> */
>
> struct nand_chip {
> struct nand_device base;
> -
> + struct nand_chip_ops ops;
> struct nand_legacy legacy;
>
> - int (*setup_read_retry)(struct nand_chip *chip, int retry_mode);
> -
> unsigned int options;
> unsigned int bbt_options;
>
> @@ -1138,8 +1147,6 @@ struct nand_chip {
>
> struct mutex lock;
> unsigned int suspended : 1;
> - int (*suspend)(struct nand_chip *chip);
> - void (*resume)(struct nand_chip *chip);
>
> u8 *oob_poi;
> struct nand_controller *controller;
> @@ -1159,9 +1166,6 @@ struct nand_chip {
> const struct nand_manufacturer *desc;
> void *priv;
> } manufacturer;
> -
> - int (*lock_area)(struct nand_chip *chip, loff_t ofs, uint64_t len);
> - int (*unlock_area)(struct nand_chip *chip, loff_t ofs, uint64_t len);
> };
>
> extern const struct mtd_ooblayout_ops nand_ooblayout_sp_ops;
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
next prev parent reply other threads:[~2020-05-25 18:37 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 [this message]
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
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=20200525203700.249af5a3@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).