All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@bootlin.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Wenyou Yang <wenyou.yang@microchip.com>,
	Josh Wu <rainyfeeling@outlook.com>,
	Tudor Ambarus <Tudor.Ambarus@microchip.com>,
	Richard Weinberger <richard@nod.at>,
	David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	Marek Vasut <marek.vasut@gmail.com>,
	Nicolas Ferre <nicolas.ferre@microchip.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Kamal Dasu <kdasu.kdev@gmail.com>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Han Xu <han.xu@nxp.com>, Harvey Hunt <harveyhuntnexus@gmail.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Sylvain Lemieux <slemieux.tyco@gmail.com>,
	Xiaolei Li <xiaolei.li@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Maxime Ripard <maxime.ripard@bootlin.com>,
	Chen-Yu Tsai <wens@csie.org>,
	Marc Gonzalez <marc.w.gonzalez@free.fr>,
	Mans Rullgard <mans@mansr.com>, Stefan Agner <stefan@agner.ch>,
	linux-mtd@lists.infradead.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	bcm-kernel-feedback-list@broadcom.com,
	linux-mediatek@lists.infradead.org
Subject: Re: [PATCH v2 01/32] mtd: rawnand: add hooks that may be called during nand_scan()
Date: Wed, 4 Jul 2018 09:09:42 +0200	[thread overview]
Message-ID: <20180704090942.24a17db1@bbrezillon> (raw)
In-Reply-To: <20180703220029.19565-2-miquel.raynal@bootlin.com>

Hi Miquel,

On Tue,  3 Jul 2018 23:59:58 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> In order to remove the limitation that forbids dynamic allocation in
> nand_scan_ident(), we must create a path that will be the same for all
> controller drivers. The idea is to use nand_scan() instead of the widely
> implemented nand_scan_ident()/nand_scan_tail() couple. In order to
> achieve this, controller drivers will need to adjust some parameters
> between these two functions depending on the NAND chip wired on them.
> 
> For that, a hook called ->attach_chip() is created in the
> nand_hw_control structure. This structure may be referenced by two ways:
> 1/ if the driver does not implement its own controller, the
>    chip->controller hook is not populated before nand_scan() so it
>    cannot be dereferenced: use chip->hwcontrol instead (which is
>    statically allocated and will be referenced later by chip->controller
>    anyway).
> 2/ through chip->controller if the driver implements its own controller.
> 
> Another hook, ->detach_chip() is also introduced in order to clean the
> controller driver's potential allocations in case of failure of
> nand_scan_tail(). There is no need for the controller driver to call the
> ->detach_chip() hook directly upon error after a successful nand_scan().  
> In this situation, calling nand_release() as before is enough.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  drivers/mtd/nand/raw/nand_base.c | 21 +++++++++++++++++++--
>  include/linux/mtd/rawnand.h      |  6 ++++++
>  2 files changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> index faac82b1e058..97a74d48b0cf 100644
> --- a/drivers/mtd/nand/raw/nand_base.c
> +++ b/drivers/mtd/nand/raw/nand_base.c
> @@ -6712,11 +6712,23 @@ EXPORT_SYMBOL(nand_scan_tail);
>  int nand_scan_with_ids(struct mtd_info *mtd, int maxchips,
>  		       struct nand_flash_dev *ids)
>  {
> +	struct nand_chip *chip = mtd_to_nand(mtd);
>  	int ret;
>  
>  	ret = nand_scan_ident(mtd, maxchips, ids);
> -	if (!ret)
> -		ret = nand_scan_tail(mtd);
> +	if (ret)
> +		return ret;
> +
> +	if (chip->controller->attach_chip) {
> +		ret = chip->controller->attach_chip(chip);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	ret = nand_scan_tail(mtd);
> +	if (ret && chip->controller->detach_chip)
> +		chip->controller->detach_chip(chip);
> +
>  	return ret;
>  }
>  EXPORT_SYMBOL(nand_scan_with_ids);
> @@ -6744,7 +6756,12 @@ void nand_cleanup(struct nand_chip *chip)
>  
>  	/* Free manufacturer priv data. */
>  	nand_manufacturer_cleanup(chip);
> +
> +	/* Free controller specific allocations after chip identification */
> +	if (chip->controller->detach_chip)
> +		chip->controller->detach_chip(chip);
>  }
> +
>  EXPORT_SYMBOL_GPL(nand_cleanup);
>  
>  /**
> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> index 0c6fb316b409..81654211e520 100644
> --- a/include/linux/mtd/rawnand.h
> +++ b/include/linux/mtd/rawnand.h
> @@ -517,11 +517,17 @@ struct nand_id {
>   * @wq:			wait queue to sleep on if a NAND operation is in
>   *			progress used instead of the per chip wait queue
>   *			when a hw controller is available.
> + * @attach_chip:	Callback that may be called between nand_detect() and
> + *			nand_scan_tail() during nand_scan() (optional).
> + * @detach_chip:	Callback that may be called if nand_scan_tail() fails
> + *			(optional).
>   */
>  struct nand_hw_control {
>  	spinlock_t lock;
>  	struct nand_chip *active;
>  	wait_queue_head_t wq;
> +	int (*attach_chip)(struct nand_chip *chip);
> +	void (*detach_chip)(struct nand_chip *chip);
>  };

Can we instead declare a nand_controller_ops struct and then have
nand_hw_control point to it. Something like:

struct nand_controller_ops {
	int (*attach_chip)(struct nand_chip *chip);
	void (*detach_chip)(struct nand_chip *chip);
};

struct nand_hw_control {
	...
	const struct nand_controller_ops *ops;
};

>  
>  static inline void nand_hw_control_init(struct nand_hw_control *nfc)

Regards,

Boris

WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon@bootlin.com>
To: Miquel Raynal <miquel.raynal@bootlin.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Mans Rullgard <mans@mansr.com>,
	Maxime Ripard <maxime.ripard@bootlin.com>,
	Stefan Agner <stefan@agner.ch>,
	linux-kernel@vger.kernel.org,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	linux-mtd@lists.infradead.org, Kamal Dasu <kdasu.kdev@gmail.com>,
	Josh Wu <rainyfeeling@outlook.com>,
	Marc Gonzalez <marc.w.gonzalez@free.fr>,
	Marek Vasut <marek.vasut@gmail.com>, Chen-Yu Tsai <wens@csie.org>,
	bcm-kernel-feedback-list@broadcom.com,
	Sylvain Lemieux <slemieux.tyco@gmail.com>,
	Wenyou Yang <wenyou.yang@microchip.com>,
	Tudor Ambarus <Tudor.Ambarus@microchip.com>,
	Vladimir Zapolskiy <vz@mleia.com>,
	Harvey Hunt <harveyhuntnexus@gmail.com>,
	linux-mediatek@lists.infradead.org,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Han Xu <han.xu@nxp.com>, Xiaolei Li <xiaolei.li@mediatek.com>,
	linux-arm-kernel@lists.infradead.org, Richard
Subject: Re: [PATCH v2 01/32] mtd: rawnand: add hooks that may be called during nand_scan()
Date: Wed, 4 Jul 2018 09:09:42 +0200	[thread overview]
Message-ID: <20180704090942.24a17db1@bbrezillon> (raw)
In-Reply-To: <20180703220029.19565-2-miquel.raynal@bootlin.com>

Hi Miquel,

On Tue,  3 Jul 2018 23:59:58 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> In order to remove the limitation that forbids dynamic allocation in
> nand_scan_ident(), we must create a path that will be the same for all
> controller drivers. The idea is to use nand_scan() instead of the widely
> implemented nand_scan_ident()/nand_scan_tail() couple. In order to
> achieve this, controller drivers will need to adjust some parameters
> between these two functions depending on the NAND chip wired on them.
> 
> For that, a hook called ->attach_chip() is created in the
> nand_hw_control structure. This structure may be referenced by two ways:
> 1/ if the driver does not implement its own controller, the
>    chip->controller hook is not populated before nand_scan() so it
>    cannot be dereferenced: use chip->hwcontrol instead (which is
>    statically allocated and will be referenced later by chip->controller
>    anyway).
> 2/ through chip->controller if the driver implements its own controller.
> 
> Another hook, ->detach_chip() is also introduced in order to clean the
> controller driver's potential allocations in case of failure of
> nand_scan_tail(). There is no need for the controller driver to call the
> ->detach_chip() hook directly upon error after a successful nand_scan().  
> In this situation, calling nand_release() as before is enough.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  drivers/mtd/nand/raw/nand_base.c | 21 +++++++++++++++++++--
>  include/linux/mtd/rawnand.h      |  6 ++++++
>  2 files changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> index faac82b1e058..97a74d48b0cf 100644
> --- a/drivers/mtd/nand/raw/nand_base.c
> +++ b/drivers/mtd/nand/raw/nand_base.c
> @@ -6712,11 +6712,23 @@ EXPORT_SYMBOL(nand_scan_tail);
>  int nand_scan_with_ids(struct mtd_info *mtd, int maxchips,
>  		       struct nand_flash_dev *ids)
>  {
> +	struct nand_chip *chip = mtd_to_nand(mtd);
>  	int ret;
>  
>  	ret = nand_scan_ident(mtd, maxchips, ids);
> -	if (!ret)
> -		ret = nand_scan_tail(mtd);
> +	if (ret)
> +		return ret;
> +
> +	if (chip->controller->attach_chip) {
> +		ret = chip->controller->attach_chip(chip);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	ret = nand_scan_tail(mtd);
> +	if (ret && chip->controller->detach_chip)
> +		chip->controller->detach_chip(chip);
> +
>  	return ret;
>  }
>  EXPORT_SYMBOL(nand_scan_with_ids);
> @@ -6744,7 +6756,12 @@ void nand_cleanup(struct nand_chip *chip)
>  
>  	/* Free manufacturer priv data. */
>  	nand_manufacturer_cleanup(chip);
> +
> +	/* Free controller specific allocations after chip identification */
> +	if (chip->controller->detach_chip)
> +		chip->controller->detach_chip(chip);
>  }
> +
>  EXPORT_SYMBOL_GPL(nand_cleanup);
>  
>  /**
> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> index 0c6fb316b409..81654211e520 100644
> --- a/include/linux/mtd/rawnand.h
> +++ b/include/linux/mtd/rawnand.h
> @@ -517,11 +517,17 @@ struct nand_id {
>   * @wq:			wait queue to sleep on if a NAND operation is in
>   *			progress used instead of the per chip wait queue
>   *			when a hw controller is available.
> + * @attach_chip:	Callback that may be called between nand_detect() and
> + *			nand_scan_tail() during nand_scan() (optional).
> + * @detach_chip:	Callback that may be called if nand_scan_tail() fails
> + *			(optional).
>   */
>  struct nand_hw_control {
>  	spinlock_t lock;
>  	struct nand_chip *active;
>  	wait_queue_head_t wq;
> +	int (*attach_chip)(struct nand_chip *chip);
> +	void (*detach_chip)(struct nand_chip *chip);
>  };

Can we instead declare a nand_controller_ops struct and then have
nand_hw_control point to it. Something like:

struct nand_controller_ops {
	int (*attach_chip)(struct nand_chip *chip);
	void (*detach_chip)(struct nand_chip *chip);
};

struct nand_hw_control {
	...
	const struct nand_controller_ops *ops;
};

>  
>  static inline void nand_hw_control_init(struct nand_hw_control *nfc)

Regards,

Boris

WARNING: multiple messages have this Message-ID (diff)
From: boris.brezillon@bootlin.com (Boris Brezillon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 01/32] mtd: rawnand: add hooks that may be called during nand_scan()
Date: Wed, 4 Jul 2018 09:09:42 +0200	[thread overview]
Message-ID: <20180704090942.24a17db1@bbrezillon> (raw)
In-Reply-To: <20180703220029.19565-2-miquel.raynal@bootlin.com>

Hi Miquel,

On Tue,  3 Jul 2018 23:59:58 +0200
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> In order to remove the limitation that forbids dynamic allocation in
> nand_scan_ident(), we must create a path that will be the same for all
> controller drivers. The idea is to use nand_scan() instead of the widely
> implemented nand_scan_ident()/nand_scan_tail() couple. In order to
> achieve this, controller drivers will need to adjust some parameters
> between these two functions depending on the NAND chip wired on them.
> 
> For that, a hook called ->attach_chip() is created in the
> nand_hw_control structure. This structure may be referenced by two ways:
> 1/ if the driver does not implement its own controller, the
>    chip->controller hook is not populated before nand_scan() so it
>    cannot be dereferenced: use chip->hwcontrol instead (which is
>    statically allocated and will be referenced later by chip->controller
>    anyway).
> 2/ through chip->controller if the driver implements its own controller.
> 
> Another hook, ->detach_chip() is also introduced in order to clean the
> controller driver's potential allocations in case of failure of
> nand_scan_tail(). There is no need for the controller driver to call the
> ->detach_chip() hook directly upon error after a successful nand_scan().  
> In this situation, calling nand_release() as before is enough.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  drivers/mtd/nand/raw/nand_base.c | 21 +++++++++++++++++++--
>  include/linux/mtd/rawnand.h      |  6 ++++++
>  2 files changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
> index faac82b1e058..97a74d48b0cf 100644
> --- a/drivers/mtd/nand/raw/nand_base.c
> +++ b/drivers/mtd/nand/raw/nand_base.c
> @@ -6712,11 +6712,23 @@ EXPORT_SYMBOL(nand_scan_tail);
>  int nand_scan_with_ids(struct mtd_info *mtd, int maxchips,
>  		       struct nand_flash_dev *ids)
>  {
> +	struct nand_chip *chip = mtd_to_nand(mtd);
>  	int ret;
>  
>  	ret = nand_scan_ident(mtd, maxchips, ids);
> -	if (!ret)
> -		ret = nand_scan_tail(mtd);
> +	if (ret)
> +		return ret;
> +
> +	if (chip->controller->attach_chip) {
> +		ret = chip->controller->attach_chip(chip);
> +		if (ret)
> +			return ret;
> +	}
> +
> +	ret = nand_scan_tail(mtd);
> +	if (ret && chip->controller->detach_chip)
> +		chip->controller->detach_chip(chip);
> +
>  	return ret;
>  }
>  EXPORT_SYMBOL(nand_scan_with_ids);
> @@ -6744,7 +6756,12 @@ void nand_cleanup(struct nand_chip *chip)
>  
>  	/* Free manufacturer priv data. */
>  	nand_manufacturer_cleanup(chip);
> +
> +	/* Free controller specific allocations after chip identification */
> +	if (chip->controller->detach_chip)
> +		chip->controller->detach_chip(chip);
>  }
> +
>  EXPORT_SYMBOL_GPL(nand_cleanup);
>  
>  /**
> diff --git a/include/linux/mtd/rawnand.h b/include/linux/mtd/rawnand.h
> index 0c6fb316b409..81654211e520 100644
> --- a/include/linux/mtd/rawnand.h
> +++ b/include/linux/mtd/rawnand.h
> @@ -517,11 +517,17 @@ struct nand_id {
>   * @wq:			wait queue to sleep on if a NAND operation is in
>   *			progress used instead of the per chip wait queue
>   *			when a hw controller is available.
> + * @attach_chip:	Callback that may be called between nand_detect() and
> + *			nand_scan_tail() during nand_scan() (optional).
> + * @detach_chip:	Callback that may be called if nand_scan_tail() fails
> + *			(optional).
>   */
>  struct nand_hw_control {
>  	spinlock_t lock;
>  	struct nand_chip *active;
>  	wait_queue_head_t wq;
> +	int (*attach_chip)(struct nand_chip *chip);
> +	void (*detach_chip)(struct nand_chip *chip);
>  };

Can we instead declare a nand_controller_ops struct and then have
nand_hw_control point to it. Something like:

struct nand_controller_ops {
	int (*attach_chip)(struct nand_chip *chip);
	void (*detach_chip)(struct nand_chip *chip);
};

struct nand_hw_control {
	...
	const struct nand_controller_ops *ops;
};

>  
>  static inline void nand_hw_control_init(struct nand_hw_control *nfc)

Regards,

Boris

  reply	other threads:[~2018-07-04  7:11 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-03 21:59 [PATCH v2 00/32] Allow dynamic allocations during NAND chip identification phase Miquel Raynal
2018-07-03 21:59 ` Miquel Raynal
2018-07-03 21:59 ` Miquel Raynal
2018-07-03 21:59 ` [PATCH v2 01/32] mtd: rawnand: add hooks that may be called during nand_scan() Miquel Raynal
2018-07-03 21:59   ` Miquel Raynal
2018-07-03 21:59   ` Miquel Raynal
2018-07-04  7:09   ` Boris Brezillon [this message]
2018-07-04  7:09     ` Boris Brezillon
2018-07-04  7:09     ` Boris Brezillon
2018-07-03 21:59 ` [PATCH v2 02/32] mtd: rawnand: brcmnand: convert driver to nand_scan() Miquel Raynal
2018-07-03 21:59   ` Miquel Raynal
2018-07-03 21:59   ` Miquel Raynal
2018-07-04  7:14   ` Boris Brezillon
2018-07-04  7:14     ` Boris Brezillon
2018-07-04  7:14     ` Boris Brezillon
2018-07-03 22:00 ` [PATCH v2 03/32] mtd: rawnand: cafe: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 04/32] mtd: rawnand: davinci: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 05/32] mtd: rawnand: denali: convert " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 06/32] mtd: rawnand: fsl_elbc: convert driver " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 07/32] mtd: rawnand: fsl_ifc: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 08/32] mtd: rawnand: fsmc: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 09/32] mtd: rawnand: gpmi: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 10/32] mtd: rawnand: hisi504: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 11/32] mtd: rawnand: jz4780: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 12/32] mtd: rawnand: lpc32xx_mlc: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 13/32] mtd: rawnand: lpc32xx_slc: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 14/32] mtd: rawnand: marvell: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 15/32] mtd: rawnand: mtk: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 16/32] mtd: rawnand: mxc: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 17/32] mtd: rawnand: nandsim: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 18/32] mtd: rawnand: omap2: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 19/32] mtd: rawnand: s3c2410: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 20/32] mtd: rawnand: sh_flctl: move all NAND chip related setup in one function Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 21/32] mtd: rawnand: sh_flctl: convert driver to nand_scan() Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 22/32] mtd: rawnand: sunxi: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 23/32] mtd: rawnand: tango: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 24/32] mtd: rawnand: txx9ndfmc: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 25/32] mtd: rawnand: vf610: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 26/32] mtd: rawnand: atmel: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 27/32] mtd: rawnand: sm_common: convert driver to nand_scan_with_ids() Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 28/32] mtd: rawnand: docg4: convert driver to nand_scan() Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 29/32] mtd: rawnand: qcom: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 30/32] mtd: rawnand: jz4740: " Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 31/32] mtd: rawnand: do not export nand_scan_[ident|tail]() anymore Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00 ` [PATCH v2 32/32] mtd: rawnand: allocate dynamically ONFI parameters during detection Miquel Raynal
2018-07-03 22:00   ` Miquel Raynal
2018-07-03 22:00   ` 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=20180704090942.24a17db1@bbrezillon \
    --to=boris.brezillon@bootlin.com \
    --cc=Tudor.Ambarus@microchip.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=han.xu@nxp.com \
    --cc=harveyhuntnexus@gmail.com \
    --cc=kdasu.kdev@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=mans@mansr.com \
    --cc=marc.w.gonzalez@free.fr \
    --cc=marek.vasut@gmail.com \
    --cc=matthias.bgg@gmail.com \
    --cc=maxime.ripard@bootlin.com \
    --cc=miquel.raynal@bootlin.com \
    --cc=nicolas.ferre@microchip.com \
    --cc=rainyfeeling@outlook.com \
    --cc=richard@nod.at \
    --cc=slemieux.tyco@gmail.com \
    --cc=stefan@agner.ch \
    --cc=vz@mleia.com \
    --cc=wens@csie.org \
    --cc=wenyou.yang@microchip.com \
    --cc=xiaolei.li@mediatek.com \
    --cc=yamada.masahiro@socionext.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.