From: Vinod Koul <vinod.koul@intel.com>
To: Peter Griffin <peter.griffin@linaro.org>
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, srinivas.kandagatla@gmail.com,
maxime.coquelin@st.com, patrice.chotard@st.com, ohad@wizery.com,
bjorn.andersson@linaro.org, arnd@arndb.de, lee.jones@linaro.org,
devicetree@vger.kernel.org, dmaengine@vger.kernel.org,
linux-remoteproc@vger.kernel.org,
Ludovic Barre <ludovic.barre@st.com>
Subject: Re: [PATCH v4 06/18] dmaengine: st_fdma: Add STMicroelectronics FDMA engine driver support
Date: Mon, 6 Jun 2016 10:24:28 +0530 [thread overview]
Message-ID: <20160606045428.GW16910@localhost> (raw)
In-Reply-To: <1464192412-16386-8-git-send-email-peter.griffin@linaro.org>
On Wed, May 25, 2016 at 05:06:40PM +0100, Peter Griffin wrote:
> @@ -527,6 +527,18 @@ config ZX_DMA
> help
> Support the DMA engine for ZTE ZX296702 platform devices.
>
> +config ST_FDMA
> + tristate "ST FDMA dmaengine support"
> + depends on ARCH_STI || COMPILE_TEST
> + depends on ST_XP70_REMOTEPROC
> + select DMA_ENGINE
> + select DMA_VIRTUAL_CHANNELS
> + help
> + Enable support for ST FDMA controller.
> + It supports 16 independent DMA channels, accepts up to 32 DMA requests
> +
> + Say Y here if you have such a chipset.
> + If unsure, say N.
Alphabetical order in Kconfig and makefile please...
> +#include <linux/init.h>
> +#include <linux/module.h>
> +#include <linux/slab.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
> +#include <linux/of_dma.h>
> +#include <linux/platform_device.h>
> +#include <linux/interrupt.h>
> +#include <linux/clk.h>
> +#include <linux/dmaengine.h>
> +#include <linux/dmapool.h>
> +#include <linux/firmware.h>
> +#include <linux/elf.h>
> +#include <linux/atomic.h>
> +#include <linux/remoteproc.h>
> +#include <linux/io.h>
that seems to be quite a lot of headers, am sure some of them are not
required..
> +static int st_fdma_dreq_get(struct st_fdma_chan *fchan)
> +{
> + struct st_fdma_dev *fdev = fchan->fdev;
> + u32 req_line_cfg = fchan->cfg.req_line;
> + u32 dreq_line;
> + int try = 0;
> +
> + /*
> + * dreq_mask is shared for n channels of fdma, so all accesses must be
> + * atomic. if the dreq_mask it change between ffz ant set_bit,
s/ant/and
> + switch (ch_sta) {
> + case FDMA_CH_CMD_STA_PAUSED:
> + fchan->status = DMA_PAUSED;
> + break;
empty line here please
> +static void st_fdma_free_chan_res(struct dma_chan *chan)
> +{
> + struct st_fdma_chan *fchan = to_st_fdma_chan(chan);
> + unsigned long flags;
> +
> + LIST_HEAD(head);
> +
> + dev_dbg(fchan->fdev->dev, "%s: freeing chan:%d\n",
> + __func__, fchan->vchan.chan.chan_id);
> +
> + if (fchan->cfg.type != ST_FDMA_TYPE_FREE_RUN)
> + st_fdma_dreq_put(fchan);
> +
> + spin_lock_irqsave(&fchan->vchan.lock, flags);
> + fchan->fdesc = NULL;
> + vchan_get_all_descriptors(&fchan->vchan, &head);
and what are you doing with all these descriptors?
> + spin_unlock_irqrestore(&fchan->vchan.lock, flags);
> +
> + dma_pool_destroy(fchan->node_pool);
> + fchan->node_pool = NULL;
> + memset(&fchan->cfg, 0, sizeof(struct st_fdma_cfg));
> +
> + rproc_shutdown(fchan->fdev->rproc);
> +}
> +static enum dma_status st_fdma_tx_status(struct dma_chan *chan,
> + dma_cookie_t cookie,
> + struct dma_tx_state *txstate)
> +{
> + struct st_fdma_chan *fchan = to_st_fdma_chan(chan);
> + struct virt_dma_desc *vd;
> + enum dma_status ret;
> + unsigned long flags;
> +
> + ret = dma_cookie_status(chan, cookie, txstate);
> + if (ret == DMA_COMPLETE)
check for txtstate here, that can be NULL and in that case no need to
calculate residue
> +
> + dma_cap_set(DMA_SLAVE, fdev->dma_device.cap_mask);
why slave, you only support cyclic
> + dma_cap_set(DMA_CYCLIC, fdev->dma_device.cap_mask);
> + dma_cap_set(DMA_MEMCPY, fdev->dma_device.cap_mask);
helps to print the 'ret' too
--
~Vinod
WARNING: multiple messages have this Message-ID (diff)
From: vinod.koul@intel.com (Vinod Koul)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 06/18] dmaengine: st_fdma: Add STMicroelectronics FDMA engine driver support
Date: Mon, 6 Jun 2016 10:24:28 +0530 [thread overview]
Message-ID: <20160606045428.GW16910@localhost> (raw)
In-Reply-To: <1464192412-16386-8-git-send-email-peter.griffin@linaro.org>
On Wed, May 25, 2016 at 05:06:40PM +0100, Peter Griffin wrote:
> @@ -527,6 +527,18 @@ config ZX_DMA
> help
> Support the DMA engine for ZTE ZX296702 platform devices.
>
> +config ST_FDMA
> + tristate "ST FDMA dmaengine support"
> + depends on ARCH_STI || COMPILE_TEST
> + depends on ST_XP70_REMOTEPROC
> + select DMA_ENGINE
> + select DMA_VIRTUAL_CHANNELS
> + help
> + Enable support for ST FDMA controller.
> + It supports 16 independent DMA channels, accepts up to 32 DMA requests
> +
> + Say Y here if you have such a chipset.
> + If unsure, say N.
Alphabetical order in Kconfig and makefile please...
> +#include <linux/init.h>
> +#include <linux/module.h>
> +#include <linux/slab.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
> +#include <linux/of_dma.h>
> +#include <linux/platform_device.h>
> +#include <linux/interrupt.h>
> +#include <linux/clk.h>
> +#include <linux/dmaengine.h>
> +#include <linux/dmapool.h>
> +#include <linux/firmware.h>
> +#include <linux/elf.h>
> +#include <linux/atomic.h>
> +#include <linux/remoteproc.h>
> +#include <linux/io.h>
that seems to be quite a lot of headers, am sure some of them are not
required..
> +static int st_fdma_dreq_get(struct st_fdma_chan *fchan)
> +{
> + struct st_fdma_dev *fdev = fchan->fdev;
> + u32 req_line_cfg = fchan->cfg.req_line;
> + u32 dreq_line;
> + int try = 0;
> +
> + /*
> + * dreq_mask is shared for n channels of fdma, so all accesses must be
> + * atomic. if the dreq_mask it change between ffz ant set_bit,
s/ant/and
> + switch (ch_sta) {
> + case FDMA_CH_CMD_STA_PAUSED:
> + fchan->status = DMA_PAUSED;
> + break;
empty line here please
> +static void st_fdma_free_chan_res(struct dma_chan *chan)
> +{
> + struct st_fdma_chan *fchan = to_st_fdma_chan(chan);
> + unsigned long flags;
> +
> + LIST_HEAD(head);
> +
> + dev_dbg(fchan->fdev->dev, "%s: freeing chan:%d\n",
> + __func__, fchan->vchan.chan.chan_id);
> +
> + if (fchan->cfg.type != ST_FDMA_TYPE_FREE_RUN)
> + st_fdma_dreq_put(fchan);
> +
> + spin_lock_irqsave(&fchan->vchan.lock, flags);
> + fchan->fdesc = NULL;
> + vchan_get_all_descriptors(&fchan->vchan, &head);
and what are you doing with all these descriptors?
> + spin_unlock_irqrestore(&fchan->vchan.lock, flags);
> +
> + dma_pool_destroy(fchan->node_pool);
> + fchan->node_pool = NULL;
> + memset(&fchan->cfg, 0, sizeof(struct st_fdma_cfg));
> +
> + rproc_shutdown(fchan->fdev->rproc);
> +}
> +static enum dma_status st_fdma_tx_status(struct dma_chan *chan,
> + dma_cookie_t cookie,
> + struct dma_tx_state *txstate)
> +{
> + struct st_fdma_chan *fchan = to_st_fdma_chan(chan);
> + struct virt_dma_desc *vd;
> + enum dma_status ret;
> + unsigned long flags;
> +
> + ret = dma_cookie_status(chan, cookie, txstate);
> + if (ret == DMA_COMPLETE)
check for txtstate here, that can be NULL and in that case no need to
calculate residue
> +
> + dma_cap_set(DMA_SLAVE, fdev->dma_device.cap_mask);
why slave, you only support cyclic
> + dma_cap_set(DMA_CYCLIC, fdev->dma_device.cap_mask);
> + dma_cap_set(DMA_MEMCPY, fdev->dma_device.cap_mask);
helps to print the 'ret' too
--
~Vinod
WARNING: multiple messages have this Message-ID (diff)
From: Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Peter Griffin <peter.griffin-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
srinivas.kandagatla-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
maxime.coquelin-qxv4g6HH51o@public.gmane.org,
patrice.chotard-qxv4g6HH51o@public.gmane.org,
ohad-Ix1uc/W3ht7QT0dZR+AlfA@public.gmane.org,
bjorn.andersson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
arnd-r2nGTMty4D4@public.gmane.org,
lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-remoteproc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Ludovic Barre <ludovic.barre-qxv4g6HH51o@public.gmane.org>
Subject: Re: [PATCH v4 06/18] dmaengine: st_fdma: Add STMicroelectronics FDMA engine driver support
Date: Mon, 6 Jun 2016 10:24:28 +0530 [thread overview]
Message-ID: <20160606045428.GW16910@localhost> (raw)
In-Reply-To: <1464192412-16386-8-git-send-email-peter.griffin-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
On Wed, May 25, 2016 at 05:06:40PM +0100, Peter Griffin wrote:
> @@ -527,6 +527,18 @@ config ZX_DMA
> help
> Support the DMA engine for ZTE ZX296702 platform devices.
>
> +config ST_FDMA
> + tristate "ST FDMA dmaengine support"
> + depends on ARCH_STI || COMPILE_TEST
> + depends on ST_XP70_REMOTEPROC
> + select DMA_ENGINE
> + select DMA_VIRTUAL_CHANNELS
> + help
> + Enable support for ST FDMA controller.
> + It supports 16 independent DMA channels, accepts up to 32 DMA requests
> +
> + Say Y here if you have such a chipset.
> + If unsure, say N.
Alphabetical order in Kconfig and makefile please...
> +#include <linux/init.h>
> +#include <linux/module.h>
> +#include <linux/slab.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
> +#include <linux/of_dma.h>
> +#include <linux/platform_device.h>
> +#include <linux/interrupt.h>
> +#include <linux/clk.h>
> +#include <linux/dmaengine.h>
> +#include <linux/dmapool.h>
> +#include <linux/firmware.h>
> +#include <linux/elf.h>
> +#include <linux/atomic.h>
> +#include <linux/remoteproc.h>
> +#include <linux/io.h>
that seems to be quite a lot of headers, am sure some of them are not
required..
> +static int st_fdma_dreq_get(struct st_fdma_chan *fchan)
> +{
> + struct st_fdma_dev *fdev = fchan->fdev;
> + u32 req_line_cfg = fchan->cfg.req_line;
> + u32 dreq_line;
> + int try = 0;
> +
> + /*
> + * dreq_mask is shared for n channels of fdma, so all accesses must be
> + * atomic. if the dreq_mask it change between ffz ant set_bit,
s/ant/and
> + switch (ch_sta) {
> + case FDMA_CH_CMD_STA_PAUSED:
> + fchan->status = DMA_PAUSED;
> + break;
empty line here please
> +static void st_fdma_free_chan_res(struct dma_chan *chan)
> +{
> + struct st_fdma_chan *fchan = to_st_fdma_chan(chan);
> + unsigned long flags;
> +
> + LIST_HEAD(head);
> +
> + dev_dbg(fchan->fdev->dev, "%s: freeing chan:%d\n",
> + __func__, fchan->vchan.chan.chan_id);
> +
> + if (fchan->cfg.type != ST_FDMA_TYPE_FREE_RUN)
> + st_fdma_dreq_put(fchan);
> +
> + spin_lock_irqsave(&fchan->vchan.lock, flags);
> + fchan->fdesc = NULL;
> + vchan_get_all_descriptors(&fchan->vchan, &head);
and what are you doing with all these descriptors?
> + spin_unlock_irqrestore(&fchan->vchan.lock, flags);
> +
> + dma_pool_destroy(fchan->node_pool);
> + fchan->node_pool = NULL;
> + memset(&fchan->cfg, 0, sizeof(struct st_fdma_cfg));
> +
> + rproc_shutdown(fchan->fdev->rproc);
> +}
> +static enum dma_status st_fdma_tx_status(struct dma_chan *chan,
> + dma_cookie_t cookie,
> + struct dma_tx_state *txstate)
> +{
> + struct st_fdma_chan *fchan = to_st_fdma_chan(chan);
> + struct virt_dma_desc *vd;
> + enum dma_status ret;
> + unsigned long flags;
> +
> + ret = dma_cookie_status(chan, cookie, txstate);
> + if (ret == DMA_COMPLETE)
check for txtstate here, that can be NULL and in that case no need to
calculate residue
> +
> + dma_cap_set(DMA_SLAVE, fdev->dma_device.cap_mask);
why slave, you only support cyclic
> + dma_cap_set(DMA_CYCLIC, fdev->dma_device.cap_mask);
> + dma_cap_set(DMA_MEMCPY, fdev->dma_device.cap_mask);
helps to print the 'ret' too
--
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2016-06-06 4:54 UTC|newest]
Thread overview: 113+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-25 16:06 [PATCH 00/18] Add support for FDMA DMA controller and xp70 rproc found on STi chipsets Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 " Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 01/18] remoteproc: st_xp70_rproc: add a xp70 slimcore rproc driver Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 17:10 ` Bjorn Andersson
2016-05-25 17:10 ` Bjorn Andersson
2016-06-06 7:22 ` Peter Griffin
2016-06-06 7:22 ` Peter Griffin
2016-05-27 13:15 ` Patrice Chotard
2016-05-27 13:15 ` Patrice Chotard
2016-05-27 13:15 ` Patrice Chotard
2016-05-27 16:13 ` Peter Griffin
2016-05-27 16:13 ` Peter Griffin
2016-05-27 16:13 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 02/18] ARM: multi_v7_defconfig: enable st xp70 " Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 03/18] MAINTAINERS: Add st xp70 rproc driver to STi section Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 04/18] dmaengine: st_fdma: Add STMicroelectronics FDMA DT binding documentation Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-27 15:44 ` Rob Herring
2016-05-27 15:44 ` Rob Herring
2016-05-27 15:44 ` Rob Herring
2016-05-25 16:06 ` [PATCH v4 05/18] dmaengine: st_fdma: Add STMicroelectronics FDMA driver header file Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-06-06 4:36 ` Vinod Koul
2016-06-06 4:36 ` Vinod Koul
2016-06-06 17:40 ` Peter Griffin
2016-06-06 17:40 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 06/18] dmaengine: st_fdma: Add STMicroelectronics FDMA engine driver support Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 17:27 ` Bjorn Andersson
2016-05-25 17:27 ` Bjorn Andersson
2016-06-06 4:54 ` Vinod Koul [this message]
2016-06-06 4:54 ` Vinod Koul
2016-06-06 4:54 ` Vinod Koul
2016-06-06 17:38 ` Peter Griffin
2016-06-06 17:38 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 07/18] ARM: STi: DT: STiH407: Add FDMA driver dt nodes Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 08/18] MAINTAINERS: Add FDMA driver files to STi section Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 09/18] ARM: multi_v7_defconfig: Enable STi FDMA driver Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 10/18] ASoC: sti: Update DT example to match the driver code Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-27 15:47 ` Rob Herring
2016-05-27 15:47 ` Rob Herring
2016-05-27 15:47 ` Rob Herring
2016-05-27 17:14 ` Mark Brown
2016-05-27 17:14 ` Mark Brown
2016-06-03 13:05 ` Peter Griffin
2016-06-03 13:05 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 11/18] ARM: multi_v7_defconfig: Enable STi and simple-card drivers Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-31 8:55 ` Arnaud Pouliquen
2016-05-31 8:55 ` Arnaud Pouliquen
2016-05-31 8:55 ` Arnaud Pouliquen
2016-06-03 12:39 ` Peter Griffin
2016-06-03 12:39 ` Peter Griffin
2016-06-03 12:39 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 12/18] ARM: DT: STiH407: Add i2s_out pinctrl configuration Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 13/18] ARM: DT: STiH407: Add i2s_in " Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 14/18] ARM: DT: STiH407: Add spdif_out pinctrl config Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 15/18] ARM: STi: DT: STiH407: Add sti-sasg-codec dt node Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-31 9:05 ` Arnaud Pouliquen
2016-05-31 9:05 ` Arnaud Pouliquen
2016-05-31 9:05 ` Arnaud Pouliquen
2016-06-03 13:00 ` Peter Griffin
2016-06-03 13:00 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 16/18] ARM: STi: DT: STiH407: Add uniperif player dt nodes Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-31 9:14 ` Arnaud Pouliquen
2016-05-31 9:14 ` Arnaud Pouliquen
2016-05-31 9:14 ` Arnaud Pouliquen
2016-05-31 9:14 ` Arnaud Pouliquen
2016-06-03 12:56 ` Peter Griffin
2016-06-03 12:56 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 17/18] ARM: STi: DT: STiH407: Add uniperif reader " Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-31 9:18 ` Arnaud Pouliquen
2016-05-31 9:18 ` Arnaud Pouliquen
2016-05-31 9:18 ` Arnaud Pouliquen
2016-06-03 12:50 ` Peter Griffin
2016-06-03 12:50 ` Peter Griffin
2016-06-03 12:50 ` Peter Griffin
2016-05-25 16:06 ` [PATCH v4 18/18] ARM: DT: STi: stihxxx-b2120: Add DT nodes for STi audio card Peter Griffin
2016-05-25 16:06 ` Peter Griffin
2016-05-31 10:16 ` Arnaud Pouliquen
2016-05-31 10:16 ` Arnaud Pouliquen
2016-05-31 10:16 ` Arnaud Pouliquen
2016-06-03 12:47 ` Peter Griffin
2016-06-03 12:47 ` Peter Griffin
2016-06-06 5:01 ` [PATCH 00/18] Add support for FDMA DMA controller and xp70 rproc found on STi chipsets Vinod Koul
2016-06-06 5:01 ` Vinod Koul
2016-06-06 5:01 ` Vinod Koul
2016-06-06 15:09 ` Peter Griffin
2016-06-06 15:09 ` Peter Griffin
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=20160606045428.GW16910@localhost \
--to=vinod.koul@intel.com \
--cc=arnd@arndb.de \
--cc=bjorn.andersson@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=lee.jones@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=ludovic.barre@st.com \
--cc=maxime.coquelin@st.com \
--cc=ohad@wizery.com \
--cc=patrice.chotard@st.com \
--cc=peter.griffin@linaro.org \
--cc=srinivas.kandagatla@gmail.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.