All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Wenyou Yang <wenyou.yang@microchip.com>,
	Josh Wu <rainyfeeling@outlook.com>,
	Tudor Ambarus <Tudor.Ambarus@microchip.com>,
	Boris Brezillon <boris.brezillon@bootlin.com>,
	Miquel Raynal <miquel.raynal@bootlin.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>
Cc: 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 v4 00/35] Allow dynamic allocations during NAND chip identification phase
Date: Fri, 27 Jul 2018 01:34:06 +0200	[thread overview]
Message-ID: <20180727013406.7749cbfd@xps13> (raw)
In-Reply-To: <20180720151527.16038-1-miquel.raynal@bootlin.com>


Miquel Raynal <miquel.raynal@bootlin.com> wrote on Fri, 20 Jul 2018
17:14:52 +0200:

> Hello,
> 
> This series make a quite deep change in the NAND framework. Until now,
> the NAND chip identification phase could be done in two manners from the
> controller driver perspective:
> 
> 1/ Call nand_scan()
> 
>   or
> 
> 1/ Call nand_scan_ident()
> 2/ Do some controller-dependent configuration
> 3/ Call nand_scan_tail().
> 
> The fact that the identifaction could be split in two operations
> involved that in the NAND framework, it was not possible to do any
> dynamic allocation without risking a memory leak. What if the core
> allocates a structure, then the driver between nand_scan_ident() and
> nand_scan_tail() decides it cannot handle the chip and errors out?
> The structure allocated by the core is lost: it is a memory leak. One
> solution could have been to add a nand_scan_ident_cleanup() function,
> but that would mean patching all the drivers anyway to make them call
> this function when something fails between nand_scan_ident() and
> nand_scan_tail().
> 
> To avoid this situation, we migrate all drivers to use nand_scan() in
> conjuction with the recently added hooks ->attach_chip() and
> ->detach_chip() that are part of the nand_controller structure  
> operations. Drivers that need to tweak their configuration after
> nand_scan_ident() should implement it. Any dynamically allocated space
> in ->attach_chip() must be freed in the second hook: ->detach_chip().
> 
> The ->detach_chip() does not have to be called upon error in the
> controller driver probe function. The nand_cleanup() helper already
> exists for that and will do the call if needed. Of course, this helper
> must be called on error after a successful nand_scan(), just like
> before.
> 
> Once all drivers not using nand_scan() are migrated, nand_scan_ident()
> and nand_scan_tail() are unexported and only available internally.
> 
> A previous work [1] removed the ONFI/JEDEC parameter pages and instead
> allocated a nand_parameters structure in nand_chip, embedding both
> generic entries and ONFI-related ones. The deal was, once dynamic
> allocation possible, allocate in nand_scan_ident() the ONFI strcuture
> only if actually needed. This is done in the last patches.
> 
> This series applies on top of nand/next.
> 
> Thank you,
> Miquèl
> 
> [1] http://lists.infradead.org/pipermail/linux-mtd/2018-March/079456.html
> 
> Changes since v3:
> =================
> * Constified all the nand_controller_ops structure definitions.
> * Fixed a build issue in fsl_elbc.
> * Added a patch in the core to prevent executing nand_scan_ident if
>   maxchips is NULL.
> * Fixed the regression around the model name.
> * Used kstrdup to allocate the model.
> * The migration from char model[] to const char *model is done in a
>   separate patch.
> 
> Changes since v2:
> =================
> * Rebased on top of nand/next.
> * Adapted all drivers to declare statically a nand_controller_ops
>   structure and assign it in the probe().
> * Added the migration of the tegra_nand.c driver.
> * Moved brcmnand controller ops affectation in the probe().
> 
> Changes since v1:
> =================
> * Rebased on top of nand/next.
> * Light rewording of the cover letter about the possibility to have a
>   nand_scan_ident_cleanup() function (just as example of how this series
>   could have been done differently).
> * Changed the hooks to reside in the nand_hw_ctrl structure instead of
>   being part of nand_ecc_ctrl as these hooks are more
>   controller-related.
> 
> 
> Miquel Raynal (35):
>   mtd: rawnand: brcmnand: convert driver to nand_scan()
>   mtd: rawnand: cafe: convert driver to nand_scan()
>   mtd: rawnand: davinci: convert driver to nand_scan()
>   mtd: rawnand: denali: convert to nand_scan()
>   mtd: rawnand: fsl_elbc: convert driver to nand_scan()
>   mtd: rawnand: fsl_ifc: convert driver to nand_scan()
>   mtd: rawnand: fsmc: convert driver to nand_scan()
>   mtd: rawnand: gpmi: convert driver to nand_scan()
>   mtd: rawnand: hisi504: convert driver to nand_scan()
>   mtd: rawnand: jz4780: convert driver to nand_scan()
>   mtd: rawnand: lpc32xx_mlc: convert driver to nand_scan()
>   mtd: rawnand: lpc32xx_slc: convert driver to nand_scan()
>   mtd: rawnand: marvell: convert driver to nand_scan()
>   mtd: rawnand: mtk: convert driver to nand_scan()
>   mtd: rawnand: mxc: convert driver to nand_scan()
>   mtd: rawnand: nandsim: convert driver to nand_scan()
>   mtd: rawnand: omap2: convert driver to nand_scan()
>   mtd: rawnand: s3c2410: convert driver to nand_scan()
>   mtd: rawnand: sh_flctl: move all NAND chip related setup in one
>     function
>   mtd: rawnand: sh_flctl: convert driver to nand_scan()
>   mtd: rawnand: sunxi: convert driver to nand_scan()
>   mtd: rawnand: tango: convert driver to nand_scan()
>   mtd: rawnand: txx9ndfmc: rename nand controller internal structure
>   mtd: rawnand: txx9ndfmc: convert driver to nand_scan()
>   mtd: rawnand: vf610: convert driver to nand_scan()
>   mtd: rawnand: atmel: convert driver to nand_scan()
>   mtd: rawnand: sm_common: convert driver to nand_scan_with_ids()
>   mtd: rawnand: allow exiting immediately nand_scan_ident()
>   mtd: rawnand: docg4: convert driver to nand_scan()
>   mtd: rawnand: qcom: convert driver to nand_scan()
>   mtd: rawnand: jz4740: convert driver to nand_scan()
>   mtd: rawnand: tegra: convert driver to nand_scan()
>   mtd: rawnand: do not export nand_scan_[ident|tail]() anymore
>   mtd: rawnand: allocate model parameter dynamically
>   mtd: rawnand: allocate dynamically ONFI parameters during detection
> 
>  drivers/mtd/nand/raw/atmel/nand-controller.c |  83 ++---
>  drivers/mtd/nand/raw/brcmnand/brcmnand.c     |  47 ++-
>  drivers/mtd/nand/raw/cafe_nand.c             | 130 ++++---
>  drivers/mtd/nand/raw/davinci_nand.c          | 195 +++++-----
>  drivers/mtd/nand/raw/denali.c                | 138 +++----
>  drivers/mtd/nand/raw/docg4.c                 |  55 +--
>  drivers/mtd/nand/raw/fsl_elbc_nand.c         |  19 +-
>  drivers/mtd/nand/raw/fsl_ifc_nand.c          |  19 +-
>  drivers/mtd/nand/raw/fsmc_nand.c             | 148 ++++----
>  drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c   |  56 +--
>  drivers/mtd/nand/raw/hisi504_nand.c          |  78 ++--
>  drivers/mtd/nand/raw/jz4740_nand.c           |  46 ++-
>  drivers/mtd/nand/raw/jz4780_nand.c           |  34 +-
>  drivers/mtd/nand/raw/lpc32xx_mlc.c           | 109 +++---
>  drivers/mtd/nand/raw/lpc32xx_slc.c           |  77 ++--
>  drivers/mtd/nand/raw/marvell_nand.c          | 205 ++++++-----
>  drivers/mtd/nand/raw/mtk_nand.c              |  75 ++--
>  drivers/mtd/nand/raw/mxc_nand.c              | 136 +++----
>  drivers/mtd/nand/raw/nand_base.c             | 132 +++++--
>  drivers/mtd/nand/raw/nand_micron.c           |   6 +-
>  drivers/mtd/nand/raw/nand_timings.c          |  12 +-
>  drivers/mtd/nand/raw/nandsim.c               |  82 +++--
>  drivers/mtd/nand/raw/omap2.c                 | 521 +++++++++++++--------------
>  drivers/mtd/nand/raw/qcom_nandc.c            |  71 ++--
>  drivers/mtd/nand/raw/s3c2410.c               |  30 +-
>  drivers/mtd/nand/raw/sh_flctl.c              |  57 ++-
>  drivers/mtd/nand/raw/sm_common.c             |  39 +-
>  drivers/mtd/nand/raw/sunxi_nand.c            |  43 +--
>  drivers/mtd/nand/raw/tango_nand.c            |  40 +-
>  drivers/mtd/nand/raw/tegra_nand.c            | 162 +++++----
>  drivers/mtd/nand/raw/txx9ndfmc.c             |  35 +-
>  drivers/mtd/nand/raw/vf610_nfc.c             | 127 +++----
>  include/linux/mtd/rawnand.h                  |  17 +-
>  include/linux/mtd/sh_flctl.h                 |   1 +
>  34 files changed, 1612 insertions(+), 1413 deletions(-)
> 

After doing the requested modifications applied to nand/next:
- 3-10, 12-16, 18-22, 25, 27, 30 from v4
- then the rest from v5.

Thanks,
Miquèl

WARNING: multiple messages have this Message-ID (diff)
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Wenyou Yang <wenyou.yang@microchip.com>,
	Josh Wu <rainyfeeling@outlook.com>,
	Tudor Ambarus <Tudor.Ambarus@microchip.com>,
	Boris Brezillon <boris.brezillon@bootlin.com>,
	Miquel Raynal <miquel.raynal@bootlin.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 <mat>
Cc: 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 v4 00/35] Allow dynamic allocations during NAND chip identification phase
Date: Fri, 27 Jul 2018 01:34:06 +0200	[thread overview]
Message-ID: <20180727013406.7749cbfd@xps13> (raw)
In-Reply-To: <20180720151527.16038-1-miquel.raynal@bootlin.com>


Miquel Raynal <miquel.raynal@bootlin.com> wrote on Fri, 20 Jul 2018
17:14:52 +0200:

> Hello,
> 
> This series make a quite deep change in the NAND framework. Until now,
> the NAND chip identification phase could be done in two manners from the
> controller driver perspective:
> 
> 1/ Call nand_scan()
> 
>   or
> 
> 1/ Call nand_scan_ident()
> 2/ Do some controller-dependent configuration
> 3/ Call nand_scan_tail().
> 
> The fact that the identifaction could be split in two operations
> involved that in the NAND framework, it was not possible to do any
> dynamic allocation without risking a memory leak. What if the core
> allocates a structure, then the driver between nand_scan_ident() and
> nand_scan_tail() decides it cannot handle the chip and errors out?
> The structure allocated by the core is lost: it is a memory leak. One
> solution could have been to add a nand_scan_ident_cleanup() function,
> but that would mean patching all the drivers anyway to make them call
> this function when something fails between nand_scan_ident() and
> nand_scan_tail().
> 
> To avoid this situation, we migrate all drivers to use nand_scan() in
> conjuction with the recently added hooks ->attach_chip() and
> ->detach_chip() that are part of the nand_controller structure  
> operations. Drivers that need to tweak their configuration after
> nand_scan_ident() should implement it. Any dynamically allocated space
> in ->attach_chip() must be freed in the second hook: ->detach_chip().
> 
> The ->detach_chip() does not have to be called upon error in the
> controller driver probe function. The nand_cleanup() helper already
> exists for that and will do the call if needed. Of course, this helper
> must be called on error after a successful nand_scan(), just like
> before.
> 
> Once all drivers not using nand_scan() are migrated, nand_scan_ident()
> and nand_scan_tail() are unexported and only available internally.
> 
> A previous work [1] removed the ONFI/JEDEC parameter pages and instead
> allocated a nand_parameters structure in nand_chip, embedding both
> generic entries and ONFI-related ones. The deal was, once dynamic
> allocation possible, allocate in nand_scan_ident() the ONFI strcuture
> only if actually needed. This is done in the last patches.
> 
> This series applies on top of nand/next.
> 
> Thank you,
> Miquèl
> 
> [1] http://lists.infradead.org/pipermail/linux-mtd/2018-March/079456.html
> 
> Changes since v3:
> =================
> * Constified all the nand_controller_ops structure definitions.
> * Fixed a build issue in fsl_elbc.
> * Added a patch in the core to prevent executing nand_scan_ident if
>   maxchips is NULL.
> * Fixed the regression around the model name.
> * Used kstrdup to allocate the model.
> * The migration from char model[] to const char *model is done in a
>   separate patch.
> 
> Changes since v2:
> =================
> * Rebased on top of nand/next.
> * Adapted all drivers to declare statically a nand_controller_ops
>   structure and assign it in the probe().
> * Added the migration of the tegra_nand.c driver.
> * Moved brcmnand controller ops affectation in the probe().
> 
> Changes since v1:
> =================
> * Rebased on top of nand/next.
> * Light rewording of the cover letter about the possibility to have a
>   nand_scan_ident_cleanup() function (just as example of how this series
>   could have been done differently).
> * Changed the hooks to reside in the nand_hw_ctrl structure instead of
>   being part of nand_ecc_ctrl as these hooks are more
>   controller-related.
> 
> 
> Miquel Raynal (35):
>   mtd: rawnand: brcmnand: convert driver to nand_scan()
>   mtd: rawnand: cafe: convert driver to nand_scan()
>   mtd: rawnand: davinci: convert driver to nand_scan()
>   mtd: rawnand: denali: convert to nand_scan()
>   mtd: rawnand: fsl_elbc: convert driver to nand_scan()
>   mtd: rawnand: fsl_ifc: convert driver to nand_scan()
>   mtd: rawnand: fsmc: convert driver to nand_scan()
>   mtd: rawnand: gpmi: convert driver to nand_scan()
>   mtd: rawnand: hisi504: convert driver to nand_scan()
>   mtd: rawnand: jz4780: convert driver to nand_scan()
>   mtd: rawnand: lpc32xx_mlc: convert driver to nand_scan()
>   mtd: rawnand: lpc32xx_slc: convert driver to nand_scan()
>   mtd: rawnand: marvell: convert driver to nand_scan()
>   mtd: rawnand: mtk: convert driver to nand_scan()
>   mtd: rawnand: mxc: convert driver to nand_scan()
>   mtd: rawnand: nandsim: convert driver to nand_scan()
>   mtd: rawnand: omap2: convert driver to nand_scan()
>   mtd: rawnand: s3c2410: convert driver to nand_scan()
>   mtd: rawnand: sh_flctl: move all NAND chip related setup in one
>     function
>   mtd: rawnand: sh_flctl: convert driver to nand_scan()
>   mtd: rawnand: sunxi: convert driver to nand_scan()
>   mtd: rawnand: tango: convert driver to nand_scan()
>   mtd: rawnand: txx9ndfmc: rename nand controller internal structure
>   mtd: rawnand: txx9ndfmc: convert driver to nand_scan()
>   mtd: rawnand: vf610: convert driver to nand_scan()
>   mtd: rawnand: atmel: convert driver to nand_scan()
>   mtd: rawnand: sm_common: convert driver to nand_scan_with_ids()
>   mtd: rawnand: allow exiting immediately nand_scan_ident()
>   mtd: rawnand: docg4: convert driver to nand_scan()
>   mtd: rawnand: qcom: convert driver to nand_scan()
>   mtd: rawnand: jz4740: convert driver to nand_scan()
>   mtd: rawnand: tegra: convert driver to nand_scan()
>   mtd: rawnand: do not export nand_scan_[ident|tail]() anymore
>   mtd: rawnand: allocate model parameter dynamically
>   mtd: rawnand: allocate dynamically ONFI parameters during detection
> 
>  drivers/mtd/nand/raw/atmel/nand-controller.c |  83 ++---
>  drivers/mtd/nand/raw/brcmnand/brcmnand.c     |  47 ++-
>  drivers/mtd/nand/raw/cafe_nand.c             | 130 ++++---
>  drivers/mtd/nand/raw/davinci_nand.c          | 195 +++++-----
>  drivers/mtd/nand/raw/denali.c                | 138 +++----
>  drivers/mtd/nand/raw/docg4.c                 |  55 +--
>  drivers/mtd/nand/raw/fsl_elbc_nand.c         |  19 +-
>  drivers/mtd/nand/raw/fsl_ifc_nand.c          |  19 +-
>  drivers/mtd/nand/raw/fsmc_nand.c             | 148 ++++----
>  drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c   |  56 +--
>  drivers/mtd/nand/raw/hisi504_nand.c          |  78 ++--
>  drivers/mtd/nand/raw/jz4740_nand.c           |  46 ++-
>  drivers/mtd/nand/raw/jz4780_nand.c           |  34 +-
>  drivers/mtd/nand/raw/lpc32xx_mlc.c           | 109 +++---
>  drivers/mtd/nand/raw/lpc32xx_slc.c           |  77 ++--
>  drivers/mtd/nand/raw/marvell_nand.c          | 205 ++++++-----
>  drivers/mtd/nand/raw/mtk_nand.c              |  75 ++--
>  drivers/mtd/nand/raw/mxc_nand.c              | 136 +++----
>  drivers/mtd/nand/raw/nand_base.c             | 132 +++++--
>  drivers/mtd/nand/raw/nand_micron.c           |   6 +-
>  drivers/mtd/nand/raw/nand_timings.c          |  12 +-
>  drivers/mtd/nand/raw/nandsim.c               |  82 +++--
>  drivers/mtd/nand/raw/omap2.c                 | 521 +++++++++++++--------------
>  drivers/mtd/nand/raw/qcom_nandc.c            |  71 ++--
>  drivers/mtd/nand/raw/s3c2410.c               |  30 +-
>  drivers/mtd/nand/raw/sh_flctl.c              |  57 ++-
>  drivers/mtd/nand/raw/sm_common.c             |  39 +-
>  drivers/mtd/nand/raw/sunxi_nand.c            |  43 +--
>  drivers/mtd/nand/raw/tango_nand.c            |  40 +-
>  drivers/mtd/nand/raw/tegra_nand.c            | 162 +++++----
>  drivers/mtd/nand/raw/txx9ndfmc.c             |  35 +-
>  drivers/mtd/nand/raw/vf610_nfc.c             | 127 +++----
>  include/linux/mtd/rawnand.h                  |  17 +-
>  include/linux/mtd/sh_flctl.h                 |   1 +
>  34 files changed, 1612 insertions(+), 1413 deletions(-)
> 

After doing the requested modifications applied to nand/next:
- 3-10, 12-16, 18-22, 25, 27, 30 from v4
- then the rest from v5.

Thanks,
Miquèl

WARNING: multiple messages have this Message-ID (diff)
From: miquel.raynal@bootlin.com (Miquel Raynal)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 00/35] Allow dynamic allocations during NAND chip identification phase
Date: Fri, 27 Jul 2018 01:34:06 +0200	[thread overview]
Message-ID: <20180727013406.7749cbfd@xps13> (raw)
In-Reply-To: <20180720151527.16038-1-miquel.raynal@bootlin.com>


Miquel Raynal <miquel.raynal@bootlin.com> wrote on Fri, 20 Jul 2018
17:14:52 +0200:

> Hello,
> 
> This series make a quite deep change in the NAND framework. Until now,
> the NAND chip identification phase could be done in two manners from the
> controller driver perspective:
> 
> 1/ Call nand_scan()
> 
>   or
> 
> 1/ Call nand_scan_ident()
> 2/ Do some controller-dependent configuration
> 3/ Call nand_scan_tail().
> 
> The fact that the identifaction could be split in two operations
> involved that in the NAND framework, it was not possible to do any
> dynamic allocation without risking a memory leak. What if the core
> allocates a structure, then the driver between nand_scan_ident() and
> nand_scan_tail() decides it cannot handle the chip and errors out?
> The structure allocated by the core is lost: it is a memory leak. One
> solution could have been to add a nand_scan_ident_cleanup() function,
> but that would mean patching all the drivers anyway to make them call
> this function when something fails between nand_scan_ident() and
> nand_scan_tail().
> 
> To avoid this situation, we migrate all drivers to use nand_scan() in
> conjuction with the recently added hooks ->attach_chip() and
> ->detach_chip() that are part of the nand_controller structure  
> operations. Drivers that need to tweak their configuration after
> nand_scan_ident() should implement it. Any dynamically allocated space
> in ->attach_chip() must be freed in the second hook: ->detach_chip().
> 
> The ->detach_chip() does not have to be called upon error in the
> controller driver probe function. The nand_cleanup() helper already
> exists for that and will do the call if needed. Of course, this helper
> must be called on error after a successful nand_scan(), just like
> before.
> 
> Once all drivers not using nand_scan() are migrated, nand_scan_ident()
> and nand_scan_tail() are unexported and only available internally.
> 
> A previous work [1] removed the ONFI/JEDEC parameter pages and instead
> allocated a nand_parameters structure in nand_chip, embedding both
> generic entries and ONFI-related ones. The deal was, once dynamic
> allocation possible, allocate in nand_scan_ident() the ONFI strcuture
> only if actually needed. This is done in the last patches.
> 
> This series applies on top of nand/next.
> 
> Thank you,
> Miqu?l
> 
> [1] http://lists.infradead.org/pipermail/linux-mtd/2018-March/079456.html
> 
> Changes since v3:
> =================
> * Constified all the nand_controller_ops structure definitions.
> * Fixed a build issue in fsl_elbc.
> * Added a patch in the core to prevent executing nand_scan_ident if
>   maxchips is NULL.
> * Fixed the regression around the model name.
> * Used kstrdup to allocate the model.
> * The migration from char model[] to const char *model is done in a
>   separate patch.
> 
> Changes since v2:
> =================
> * Rebased on top of nand/next.
> * Adapted all drivers to declare statically a nand_controller_ops
>   structure and assign it in the probe().
> * Added the migration of the tegra_nand.c driver.
> * Moved brcmnand controller ops affectation in the probe().
> 
> Changes since v1:
> =================
> * Rebased on top of nand/next.
> * Light rewording of the cover letter about the possibility to have a
>   nand_scan_ident_cleanup() function (just as example of how this series
>   could have been done differently).
> * Changed the hooks to reside in the nand_hw_ctrl structure instead of
>   being part of nand_ecc_ctrl as these hooks are more
>   controller-related.
> 
> 
> Miquel Raynal (35):
>   mtd: rawnand: brcmnand: convert driver to nand_scan()
>   mtd: rawnand: cafe: convert driver to nand_scan()
>   mtd: rawnand: davinci: convert driver to nand_scan()
>   mtd: rawnand: denali: convert to nand_scan()
>   mtd: rawnand: fsl_elbc: convert driver to nand_scan()
>   mtd: rawnand: fsl_ifc: convert driver to nand_scan()
>   mtd: rawnand: fsmc: convert driver to nand_scan()
>   mtd: rawnand: gpmi: convert driver to nand_scan()
>   mtd: rawnand: hisi504: convert driver to nand_scan()
>   mtd: rawnand: jz4780: convert driver to nand_scan()
>   mtd: rawnand: lpc32xx_mlc: convert driver to nand_scan()
>   mtd: rawnand: lpc32xx_slc: convert driver to nand_scan()
>   mtd: rawnand: marvell: convert driver to nand_scan()
>   mtd: rawnand: mtk: convert driver to nand_scan()
>   mtd: rawnand: mxc: convert driver to nand_scan()
>   mtd: rawnand: nandsim: convert driver to nand_scan()
>   mtd: rawnand: omap2: convert driver to nand_scan()
>   mtd: rawnand: s3c2410: convert driver to nand_scan()
>   mtd: rawnand: sh_flctl: move all NAND chip related setup in one
>     function
>   mtd: rawnand: sh_flctl: convert driver to nand_scan()
>   mtd: rawnand: sunxi: convert driver to nand_scan()
>   mtd: rawnand: tango: convert driver to nand_scan()
>   mtd: rawnand: txx9ndfmc: rename nand controller internal structure
>   mtd: rawnand: txx9ndfmc: convert driver to nand_scan()
>   mtd: rawnand: vf610: convert driver to nand_scan()
>   mtd: rawnand: atmel: convert driver to nand_scan()
>   mtd: rawnand: sm_common: convert driver to nand_scan_with_ids()
>   mtd: rawnand: allow exiting immediately nand_scan_ident()
>   mtd: rawnand: docg4: convert driver to nand_scan()
>   mtd: rawnand: qcom: convert driver to nand_scan()
>   mtd: rawnand: jz4740: convert driver to nand_scan()
>   mtd: rawnand: tegra: convert driver to nand_scan()
>   mtd: rawnand: do not export nand_scan_[ident|tail]() anymore
>   mtd: rawnand: allocate model parameter dynamically
>   mtd: rawnand: allocate dynamically ONFI parameters during detection
> 
>  drivers/mtd/nand/raw/atmel/nand-controller.c |  83 ++---
>  drivers/mtd/nand/raw/brcmnand/brcmnand.c     |  47 ++-
>  drivers/mtd/nand/raw/cafe_nand.c             | 130 ++++---
>  drivers/mtd/nand/raw/davinci_nand.c          | 195 +++++-----
>  drivers/mtd/nand/raw/denali.c                | 138 +++----
>  drivers/mtd/nand/raw/docg4.c                 |  55 +--
>  drivers/mtd/nand/raw/fsl_elbc_nand.c         |  19 +-
>  drivers/mtd/nand/raw/fsl_ifc_nand.c          |  19 +-
>  drivers/mtd/nand/raw/fsmc_nand.c             | 148 ++++----
>  drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c   |  56 +--
>  drivers/mtd/nand/raw/hisi504_nand.c          |  78 ++--
>  drivers/mtd/nand/raw/jz4740_nand.c           |  46 ++-
>  drivers/mtd/nand/raw/jz4780_nand.c           |  34 +-
>  drivers/mtd/nand/raw/lpc32xx_mlc.c           | 109 +++---
>  drivers/mtd/nand/raw/lpc32xx_slc.c           |  77 ++--
>  drivers/mtd/nand/raw/marvell_nand.c          | 205 ++++++-----
>  drivers/mtd/nand/raw/mtk_nand.c              |  75 ++--
>  drivers/mtd/nand/raw/mxc_nand.c              | 136 +++----
>  drivers/mtd/nand/raw/nand_base.c             | 132 +++++--
>  drivers/mtd/nand/raw/nand_micron.c           |   6 +-
>  drivers/mtd/nand/raw/nand_timings.c          |  12 +-
>  drivers/mtd/nand/raw/nandsim.c               |  82 +++--
>  drivers/mtd/nand/raw/omap2.c                 | 521 +++++++++++++--------------
>  drivers/mtd/nand/raw/qcom_nandc.c            |  71 ++--
>  drivers/mtd/nand/raw/s3c2410.c               |  30 +-
>  drivers/mtd/nand/raw/sh_flctl.c              |  57 ++-
>  drivers/mtd/nand/raw/sm_common.c             |  39 +-
>  drivers/mtd/nand/raw/sunxi_nand.c            |  43 +--
>  drivers/mtd/nand/raw/tango_nand.c            |  40 +-
>  drivers/mtd/nand/raw/tegra_nand.c            | 162 +++++----
>  drivers/mtd/nand/raw/txx9ndfmc.c             |  35 +-
>  drivers/mtd/nand/raw/vf610_nfc.c             | 127 +++----
>  include/linux/mtd/rawnand.h                  |  17 +-
>  include/linux/mtd/sh_flctl.h                 |   1 +
>  34 files changed, 1612 insertions(+), 1413 deletions(-)
> 

After doing the requested modifications applied to nand/next:
- 3-10, 12-16, 18-22, 25, 27, 30 from v4
- then the rest from v5.

Thanks,
Miqu?l

  parent reply	other threads:[~2018-07-26 23:34 UTC|newest]

Thread overview: 259+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-20 15:14 [PATCH v4 00/35] Allow dynamic allocations during NAND chip identification phase Miquel Raynal
2018-07-20 15:14 ` Miquel Raynal
2018-07-20 15:14 ` Miquel Raynal
2018-07-20 15:14 ` [PATCH v4 01/35] mtd: rawnand: brcmnand: convert driver to nand_scan() Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-21  6:23   ` Boris Brezillon
2018-07-21  6:23     ` Boris Brezillon
2018-07-21  6:23     ` Boris Brezillon
2018-07-20 15:14 ` [PATCH v4 02/35] mtd: rawnand: cafe: " Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-21  6:35   ` Boris Brezillon
2018-07-21  6:35     ` Boris Brezillon
2018-07-21  6:35     ` Boris Brezillon
2018-07-20 15:14 ` [PATCH v4 03/35] mtd: rawnand: davinci: " Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-21  6:44   ` Boris Brezillon
2018-07-21  6:44     ` Boris Brezillon
2018-07-21  6:44     ` Boris Brezillon
2018-07-20 15:14 ` [PATCH v4 04/35] mtd: rawnand: denali: convert " Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-21  6:46   ` Boris Brezillon
2018-07-21  6:46     ` Boris Brezillon
2018-07-21  6:46     ` Boris Brezillon
2018-07-25  9:42   ` Masahiro Yamada
2018-07-25  9:42     ` Masahiro Yamada
2018-07-25  9:42     ` Masahiro Yamada
2018-07-25  9:42     ` Masahiro Yamada
2018-07-25  9:51     ` Boris Brezillon
2018-07-25  9:51       ` Boris Brezillon
2018-07-25  9:51       ` Boris Brezillon
2018-07-25  9:51       ` Boris Brezillon
2018-07-25 12:47       ` Miquel Raynal
2018-07-25 12:47         ` Miquel Raynal
2018-07-25 12:47         ` Miquel Raynal
2018-07-25 12:47         ` Miquel Raynal
2018-07-25 14:16         ` Masahiro Yamada
2018-07-25 14:16           ` Masahiro Yamada
2018-07-25 14:16           ` Masahiro Yamada
2018-07-25 14:16           ` Masahiro Yamada
2018-07-20 15:14 ` [PATCH v4 05/35] mtd: rawnand: fsl_elbc: convert driver " Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-21  6:50   ` Boris Brezillon
2018-07-21  6:50     ` Boris Brezillon
2018-07-21  6:50     ` Boris Brezillon
2018-07-20 15:14 ` [PATCH v4 06/35] mtd: rawnand: fsl_ifc: " Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-21  6:53   ` Boris Brezillon
2018-07-21  6:53     ` Boris Brezillon
2018-07-21  6:53     ` Boris Brezillon
2018-07-20 15:14 ` [PATCH v4 07/35] mtd: rawnand: fsmc: " Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-20 15:14   ` Miquel Raynal
2018-07-21  6:55   ` Boris Brezillon
2018-07-21  6:55     ` Boris Brezillon
2018-07-21  6:55     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 08/35] mtd: rawnand: gpmi: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21  6:56   ` Boris Brezillon
2018-07-21  6:56     ` Boris Brezillon
2018-07-21  6:56     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 09/35] mtd: rawnand: hisi504: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21  6:59   ` Boris Brezillon
2018-07-21  6:59     ` Boris Brezillon
2018-07-21  6:59     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 10/35] mtd: rawnand: jz4780: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 15:23   ` Boris Brezillon
2018-07-21 15:23     ` Boris Brezillon
2018-07-21 15:23     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 11/35] mtd: rawnand: lpc32xx_mlc: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 15:26   ` Boris Brezillon
2018-07-21 15:26     ` Boris Brezillon
2018-07-21 15:26     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 12/35] mtd: rawnand: lpc32xx_slc: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 15:27   ` Boris Brezillon
2018-07-21 15:27     ` Boris Brezillon
2018-07-21 15:27     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 13/35] mtd: rawnand: marvell: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 16:57   ` Boris Brezillon
2018-07-21 16:57     ` Boris Brezillon
2018-07-21 16:57     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 14/35] mtd: rawnand: mtk: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:10   ` Boris Brezillon
2018-07-21 17:10     ` Boris Brezillon
2018-07-21 17:10     ` Boris Brezillon
2018-07-26  6:06     ` xiaolei li
2018-07-26  6:06       ` xiaolei li
2018-07-26  6:06       ` xiaolei li
2018-07-26  6:14       ` Boris Brezillon
2018-07-26  6:14         ` Boris Brezillon
2018-07-26  6:14         ` Boris Brezillon
2018-07-26  6:46         ` xiaolei li
2018-07-26  6:46           ` xiaolei li
2018-07-26  6:46           ` xiaolei li
2018-07-26  6:49           ` Miquel Raynal
2018-07-26  6:49             ` Miquel Raynal
2018-07-26  6:49             ` Miquel Raynal
2018-07-26  6:53             ` xiaolei li
2018-07-26  6:53               ` xiaolei li
2018-07-26  6:53               ` xiaolei li
2018-07-20 15:15 ` [PATCH v4 15/35] mtd: rawnand: mxc: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:19   ` Boris Brezillon
2018-07-21 17:19     ` Boris Brezillon
2018-07-21 17:19     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 16/35] mtd: rawnand: nandsim: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:21   ` Boris Brezillon
2018-07-21 17:21     ` Boris Brezillon
2018-07-21 17:21     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 17/35] mtd: rawnand: omap2: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:34   ` Boris Brezillon
2018-07-21 17:34     ` Boris Brezillon
2018-07-21 17:34     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 18/35] mtd: rawnand: s3c2410: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:38   ` Boris Brezillon
2018-07-21 17:38     ` Boris Brezillon
2018-07-21 17:38     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 19/35] mtd: rawnand: sh_flctl: move all NAND chip related setup in one function Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:48   ` Boris Brezillon
2018-07-21 17:48     ` Boris Brezillon
2018-07-21 17:48     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 20/35] mtd: rawnand: sh_flctl: convert driver to nand_scan() Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:49   ` Boris Brezillon
2018-07-21 17:49     ` Boris Brezillon
2018-07-21 17:49     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 21/35] mtd: rawnand: sunxi: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:50   ` Boris Brezillon
2018-07-21 17:50     ` Boris Brezillon
2018-07-21 17:50     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 22/35] mtd: rawnand: tango: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:52   ` Boris Brezillon
2018-07-21 17:52     ` Boris Brezillon
2018-07-21 17:52     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 23/35] mtd: rawnand: txx9ndfmc: rename nand controller internal structure Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:53   ` Boris Brezillon
2018-07-21 17:53     ` Boris Brezillon
2018-07-21 17:53     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 24/35] mtd: rawnand: txx9ndfmc: convert driver to nand_scan() Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 17:54   ` Boris Brezillon
2018-07-21 17:54     ` Boris Brezillon
2018-07-21 17:54     ` Boris Brezillon
2018-07-21 18:04   ` Boris Brezillon
2018-07-21 18:04     ` Boris Brezillon
2018-07-21 18:04     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 25/35] mtd: rawnand: vf610: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-21 18:05   ` Boris Brezillon
2018-07-21 18:05     ` Boris Brezillon
2018-07-21 18:05     ` Boris Brezillon
2018-07-25  8:57   ` Stefan Agner
2018-07-25  8:57     ` Stefan Agner
2018-07-25  8:57     ` Stefan Agner
2018-07-20 15:15 ` [PATCH v4 26/35] mtd: rawnand: atmel: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22  6:40   ` Boris Brezillon
2018-07-22  6:40     ` Boris Brezillon
2018-07-22  6:40     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 27/35] mtd: rawnand: sm_common: convert driver to nand_scan_with_ids() Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22  6:44   ` Boris Brezillon
2018-07-22  6:44     ` Boris Brezillon
2018-07-22  6:44     ` Boris Brezillon
2018-07-26 19:06     ` Boris Brezillon
2018-07-26 19:06       ` Boris Brezillon
2018-07-26 19:06       ` Boris Brezillon
2018-07-26 23:13       ` Miquel Raynal
2018-07-26 23:13         ` Miquel Raynal
2018-07-26 23:13         ` Miquel Raynal
2018-07-20 15:15 ` [PATCH v4 28/35] mtd: rawnand: allow exiting immediately nand_scan_ident() Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22  8:49   ` Boris Brezillon
2018-07-22  8:49     ` Boris Brezillon
2018-07-22  8:49     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 29/35] mtd: rawnand: docg4: convert driver to nand_scan() Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22  8:52   ` Boris Brezillon
2018-07-22  8:52     ` Boris Brezillon
2018-07-22  8:52     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 30/35] mtd: rawnand: qcom: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22  8:59   ` Boris Brezillon
2018-07-22  8:59     ` Boris Brezillon
2018-07-22  8:59     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 31/35] mtd: rawnand: jz4740: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22  9:29   ` Boris Brezillon
2018-07-22  9:29     ` Boris Brezillon
2018-07-22  9:29     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 32/35] mtd: rawnand: tegra: " Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22  9:31   ` Boris Brezillon
2018-07-22  9:31     ` Boris Brezillon
2018-07-22  9:31     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 33/35] mtd: rawnand: do not export nand_scan_[ident|tail]() anymore Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22 10:30   ` Boris Brezillon
2018-07-22 10:30     ` Boris Brezillon
2018-07-22 10:30     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 34/35] mtd: rawnand: allocate model parameter dynamically Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22 10:32   ` Boris Brezillon
2018-07-22 10:32     ` Boris Brezillon
2018-07-22 10:32     ` Boris Brezillon
2018-07-20 15:15 ` [PATCH v4 35/35] mtd: rawnand: allocate dynamically ONFI parameters during detection Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-20 15:15   ` Miquel Raynal
2018-07-22 10:35   ` Boris Brezillon
2018-07-22 10:35     ` Boris Brezillon
2018-07-22 10:35     ` Boris Brezillon
2018-07-26 23:34 ` Miquel Raynal [this message]
2018-07-26 23:34   ` [PATCH v4 00/35] Allow dynamic allocations during NAND chip identification phase Miquel Raynal
2018-07-26 23:34   ` 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=20180727013406.7749cbfd@xps13 \
    --to=miquel.raynal@bootlin.com \
    --cc=Tudor.Ambarus@microchip.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=boris.brezillon@bootlin.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=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.