linux-mtd.lists.infradead.org archive mirror
 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 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/

  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).