From: Murali Karicheri <m-karicheri2@ti.com>
To: Mohit KUMAR DCG <Mohit.KUMAR@st.com>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
Pratyush ANAND <pratyush.anand@st.com>,
"Shilimkar, Santosh" <santosh.shilimkar@ti.com>,
Russell King <linux@arm.linux.org.uk>,
Grant Likely <grant.likely@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
Jingoo Han <jg1.han@samsung.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Richard Zhu <r65037@freescale.com>,
"ABRAHAM, KISHON VIJAY" <kishon@ti.com>,
Marek Vasut <marex@denx.de>, Arnd Bergmann <arnd@arndb.de>,
Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
Randy Dunlap <rdunlap@infradead.org>
Subject: Re: [PATCH v2 0/8] Add Keystone PCIe controller driver
Date: Fri, 20 Jun 2014 17:17:07 -0400 [thread overview]
Message-ID: <53A4A4D3.1000908@ti.com> (raw)
In-Reply-To: <2CC2A0A4A178534D93D5159BF3BCB6619C5F8169D1@EAPEX1MAIL1.st.com>
Sorry, my previous response was in html and not sure it has made to the
list. I did
get an error as well. So resending my response.
On 6/18/2014 6:14 AM, Mohit KUMAR DCG wrote:
> Hello Murali,
>
>> -----Original Message-----
>> From: Murali Karicheri [mailto:m-karicheri2@ti.com]
>> Sent: Wednesday, June 11, 2014 12:21 AM
>> To:linux-arm-kernel@lists.infradead.org;linux-kernel@vger.kernel.org;
>> linux-pci@vger.kernel.org;devicetree@vger.kernel.org; linux-
>> doc@vger.kernel.org
>> Cc: Murali Karicheri; Santosh Shilimkar; Russell King; Grant Likely; Rob Herring;
>> Mohit KUMAR DCG; Jingoo Han; Bjorn Helgaas; Pratyush ANAND; Richard
>> Zhu; Kishon Vijay Abraham I; Marek Vasut; Arnd Bergmann; Pawel Moll;
>> Mark Rutland; Ian Campbell; Kumar Gala; Randy Dunlap
>> Subject: [PATCH v2 0/8] Add Keystone PCIe controller driver
>>
>> This patch adds a PCIe controller driver for Keystone SoCs. This is based on v1
>> of the series posted to the mailing list.
>>
> 1. I think your first patch is OK which handles platform specific ATU implementation.
>
> 2. For MSI part, I think you just need to add two new callbacks with pp-ops, something similar to:
> pp->ops->msi_set
>
> pp->ops->msi_clear
>
> With these two platform specific callbacks you should be able to manage MSI handling.
> So idea is that dw_msi code uses pp->ops->msi_set/clear if platform define these,
> otherwise use dw_msi_set/clear (which you need to refactor from existing code)
>
> So other than your keystone changes we expect 3 patches:
> -- 1st same as you sent 1/8: for ATU handeling
> -- 2nd to refactor dw_msi_set/clear: refactor from existing code
Mohit,
Thanks for your comments.
Just want to be on the same page
1. In my original patch [PATCH v2 3/8] PCI: designware: update pcie core
driver to work with dw hw version 3.65.
I had following changes:-
diff --git a/drivers/pci/host/pcie-designware.c
b/drivers/pci/host/pcie-designware.c
index e4bd19a..f985811 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -277,11 +277,15 @@ static int assign_irq(int no_irqs, struct msi_desc
*desc, int *pos)
}
set_bit(pos0 + i, pp->msi_irq_in_use);
/*Enable corresponding interrupt in MSI interrupt controller */
-res = ((pos0 + i) / 32) * 12;
-bit = (pos0 + i) % 32;
-dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, &val);
-val |= 1 << bit;
-dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, val);
+if (!(pp->version & DW_V3_65)) {
+res = ((pos0 + i) / 32) * 12;
+bit = (pos0 + i) % 32;
+dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res,
+4, &val);
+val |= 1 << bit;
+dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res,
+4, val);
+}
}
I assume you are referring to the above code for msi_set(). I missed to
add similar code change to clear_irq().
So in assign_irq()
if (pp->ops->msi_set)
pp->ops->msi_set()
Similarly in clear_irq()
if (pp->ops->msi_clear)
pp->ops->msi_clear()
*pos = pos0;
@@ -349,7 +353,10 @@ static int dw_msi_setup_irq(struct msi_chip *chip,
struct pci_dev *pdev,
*/
desc->msi_attrib.multiple = msgvec;
-msg.address_lo = virt_to_phys((void *)pp->msi_data);
+if (pp->ops->get_msi_data)
+msg.address_lo = pp->ops->get_msi_data(pp);
+else
+msg.address_lo = virt_to_phys((void *)pp->msi_data);
msg.address_hi = 0x0;
msg.data = pos;
What about this code? This requires get_msi_data() as well
> -- 3rd to use pp->ops->msi_set/clear if defined.
Why not API enhancement and refactor the code in a single patch?
Murali
> Pls let us know for any issue or have different opinion.
>
> Regards
> Mohit
>
>
>
>
>> --
>> 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: m-karicheri2@ti.com (Murali Karicheri)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 0/8] Add Keystone PCIe controller driver
Date: Fri, 20 Jun 2014 17:17:07 -0400 [thread overview]
Message-ID: <53A4A4D3.1000908@ti.com> (raw)
In-Reply-To: <2CC2A0A4A178534D93D5159BF3BCB6619C5F8169D1@EAPEX1MAIL1.st.com>
Sorry, my previous response was in html and not sure it has made to the
list. I did
get an error as well. So resending my response.
On 6/18/2014 6:14 AM, Mohit KUMAR DCG wrote:
> Hello Murali,
>
>> -----Original Message-----
>> From: Murali Karicheri [mailto:m-karicheri2 at ti.com]
>> Sent: Wednesday, June 11, 2014 12:21 AM
>> To:linux-arm-kernel at lists.infradead.org;linux-kernel at vger.kernel.org;
>> linux-pci at vger.kernel.org;devicetree at vger.kernel.org; linux-
>> doc at vger.kernel.org
>> Cc: Murali Karicheri; Santosh Shilimkar; Russell King; Grant Likely; Rob Herring;
>> Mohit KUMAR DCG; Jingoo Han; Bjorn Helgaas; Pratyush ANAND; Richard
>> Zhu; Kishon Vijay Abraham I; Marek Vasut; Arnd Bergmann; Pawel Moll;
>> Mark Rutland; Ian Campbell; Kumar Gala; Randy Dunlap
>> Subject: [PATCH v2 0/8] Add Keystone PCIe controller driver
>>
>> This patch adds a PCIe controller driver for Keystone SoCs. This is based on v1
>> of the series posted to the mailing list.
>>
> 1. I think your first patch is OK which handles platform specific ATU implementation.
>
> 2. For MSI part, I think you just need to add two new callbacks with pp-ops, something similar to:
> pp->ops->msi_set
>
> pp->ops->msi_clear
>
> With these two platform specific callbacks you should be able to manage MSI handling.
> So idea is that dw_msi code uses pp->ops->msi_set/clear if platform define these,
> otherwise use dw_msi_set/clear (which you need to refactor from existing code)
>
> So other than your keystone changes we expect 3 patches:
> -- 1st same as you sent 1/8: for ATU handeling
> -- 2nd to refactor dw_msi_set/clear: refactor from existing code
Mohit,
Thanks for your comments.
Just want to be on the same page
1. In my original patch [PATCH v2 3/8] PCI: designware: update pcie core
driver to work with dw hw version 3.65.
I had following changes:-
diff --git a/drivers/pci/host/pcie-designware.c
b/drivers/pci/host/pcie-designware.c
index e4bd19a..f985811 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -277,11 +277,15 @@ static int assign_irq(int no_irqs, struct msi_desc
*desc, int *pos)
}
set_bit(pos0 + i, pp->msi_irq_in_use);
/*Enable corresponding interrupt in MSI interrupt controller */
-res = ((pos0 + i) / 32) * 12;
-bit = (pos0 + i) % 32;
-dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, &val);
-val |= 1 << bit;
-dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, val);
+if (!(pp->version & DW_V3_65)) {
+res = ((pos0 + i) / 32) * 12;
+bit = (pos0 + i) % 32;
+dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res,
+4, &val);
+val |= 1 << bit;
+dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res,
+4, val);
+}
}
I assume you are referring to the above code for msi_set(). I missed to
add similar code change to clear_irq().
So in assign_irq()
if (pp->ops->msi_set)
pp->ops->msi_set()
Similarly in clear_irq()
if (pp->ops->msi_clear)
pp->ops->msi_clear()
*pos = pos0;
@@ -349,7 +353,10 @@ static int dw_msi_setup_irq(struct msi_chip *chip,
struct pci_dev *pdev,
*/
desc->msi_attrib.multiple = msgvec;
-msg.address_lo = virt_to_phys((void *)pp->msi_data);
+if (pp->ops->get_msi_data)
+msg.address_lo = pp->ops->get_msi_data(pp);
+else
+msg.address_lo = virt_to_phys((void *)pp->msi_data);
msg.address_hi = 0x0;
msg.data = pos;
What about this code? This requires get_msi_data() as well
> -- 3rd to use pp->ops->msi_set/clear if defined.
Why not API enhancement and refactor the code in a single patch?
Murali
> Pls let us know for any issue or have different opinion.
>
> Regards
> Mohit
>
>
>
>
>> --
>> 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Murali Karicheri <m-karicheri2@ti.com>
To: Mohit KUMAR DCG <Mohit.KUMAR@st.com>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
Pratyush ANAND <pratyush.anand@st.com>,
"Shilimkar, Santosh" <santosh.shilimkar@ti.com>,
Russell King <linux@arm.linux.org.uk>,
Grant Likely <grant.likely@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
Jingoo Han <jg1.han@samsung.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Richard Zhu <r65037@freescale.com>,
"ABRAHAM, KISHON VIJAY" <kishon@ti.com>,
Marek Vasut <marex@denx.de>, Arnd Bergmann <arnd@arndb.de>,
Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>
Subject: Re: [PATCH v2 0/8] Add Keystone PCIe controller driver
Date: Fri, 20 Jun 2014 17:17:07 -0400 [thread overview]
Message-ID: <53A4A4D3.1000908@ti.com> (raw)
In-Reply-To: <2CC2A0A4A178534D93D5159BF3BCB6619C5F8169D1@EAPEX1MAIL1.st.com>
Sorry, my previous response was in html and not sure it has made to the
list. I did
get an error as well. So resending my response.
On 6/18/2014 6:14 AM, Mohit KUMAR DCG wrote:
> Hello Murali,
>
>> -----Original Message-----
>> From: Murali Karicheri [mailto:m-karicheri2@ti.com]
>> Sent: Wednesday, June 11, 2014 12:21 AM
>> To:linux-arm-kernel@lists.infradead.org;linux-kernel@vger.kernel.org;
>> linux-pci@vger.kernel.org;devicetree@vger.kernel.org; linux-
>> doc@vger.kernel.org
>> Cc: Murali Karicheri; Santosh Shilimkar; Russell King; Grant Likely; Rob Herring;
>> Mohit KUMAR DCG; Jingoo Han; Bjorn Helgaas; Pratyush ANAND; Richard
>> Zhu; Kishon Vijay Abraham I; Marek Vasut; Arnd Bergmann; Pawel Moll;
>> Mark Rutland; Ian Campbell; Kumar Gala; Randy Dunlap
>> Subject: [PATCH v2 0/8] Add Keystone PCIe controller driver
>>
>> This patch adds a PCIe controller driver for Keystone SoCs. This is based on v1
>> of the series posted to the mailing list.
>>
> 1. I think your first patch is OK which handles platform specific ATU implementation.
>
> 2. For MSI part, I think you just need to add two new callbacks with pp-ops, something similar to:
> pp->ops->msi_set
>
> pp->ops->msi_clear
>
> With these two platform specific callbacks you should be able to manage MSI handling.
> So idea is that dw_msi code uses pp->ops->msi_set/clear if platform define these,
> otherwise use dw_msi_set/clear (which you need to refactor from existing code)
>
> So other than your keystone changes we expect 3 patches:
> -- 1st same as you sent 1/8: for ATU handeling
> -- 2nd to refactor dw_msi_set/clear: refactor from existing code
Mohit,
Thanks for your comments.
Just want to be on the same page
1. In my original patch [PATCH v2 3/8] PCI: designware: update pcie core
driver to work with dw hw version 3.65.
I had following changes:-
diff --git a/drivers/pci/host/pcie-designware.c
b/drivers/pci/host/pcie-designware.c
index e4bd19a..f985811 100644
--- a/drivers/pci/host/pcie-designware.c
+++ b/drivers/pci/host/pcie-designware.c
@@ -277,11 +277,15 @@ static int assign_irq(int no_irqs, struct msi_desc
*desc, int *pos)
}
set_bit(pos0 + i, pp->msi_irq_in_use);
/*Enable corresponding interrupt in MSI interrupt controller */
-res = ((pos0 + i) / 32) * 12;
-bit = (pos0 + i) % 32;
-dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, &val);
-val |= 1 << bit;
-dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res, 4, val);
+if (!(pp->version & DW_V3_65)) {
+res = ((pos0 + i) / 32) * 12;
+bit = (pos0 + i) % 32;
+dw_pcie_rd_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res,
+4, &val);
+val |= 1 << bit;
+dw_pcie_wr_own_conf(pp, PCIE_MSI_INTR0_ENABLE + res,
+4, val);
+}
}
I assume you are referring to the above code for msi_set(). I missed to
add similar code change to clear_irq().
So in assign_irq()
if (pp->ops->msi_set)
pp->ops->msi_set()
Similarly in clear_irq()
if (pp->ops->msi_clear)
pp->ops->msi_clear()
*pos = pos0;
@@ -349,7 +353,10 @@ static int dw_msi_setup_irq(struct msi_chip *chip,
struct pci_dev *pdev,
*/
desc->msi_attrib.multiple = msgvec;
-msg.address_lo = virt_to_phys((void *)pp->msi_data);
+if (pp->ops->get_msi_data)
+msg.address_lo = pp->ops->get_msi_data(pp);
+else
+msg.address_lo = virt_to_phys((void *)pp->msi_data);
msg.address_hi = 0x0;
msg.data = pos;
What about this code? This requires get_msi_data() as well
> -- 3rd to use pp->ops->msi_set/clear if defined.
Why not API enhancement and refactor the code in a single patch?
Murali
> Pls let us know for any issue or have different opinion.
>
> Regards
> Mohit
>
>
>
>
>> --
>> 1.7.9.5
next prev parent reply other threads:[~2014-06-20 21:18 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-10 18:51 [PATCH v2 0/8] Add Keystone PCIe controller driver Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` [PATCH v2 1/8] PCI: designware: add rd[wr]_other_conf API Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-18 6:37 ` Pratyush Anand
2014-06-18 6:37 ` Pratyush Anand
2014-06-18 6:37 ` Pratyush Anand
2014-06-10 18:51 ` [PATCH v2 2/8] PCI: designware: refactor host init code to re-use on v3.65 DW pci hw Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-18 7:05 ` Pratyush Anand
2014-06-18 7:05 ` Pratyush Anand
2014-06-18 7:05 ` Pratyush Anand
2014-06-20 18:47 ` Murali Karicheri
2014-06-20 18:47 ` Murali Karicheri
2014-06-20 18:47 ` Murali Karicheri
2014-06-23 5:05 ` Pratyush Anand
2014-06-23 5:05 ` Pratyush Anand
2014-06-23 5:05 ` Pratyush Anand
2014-06-23 5:26 ` Mohit KUMAR DCG
2014-06-23 5:26 ` Mohit KUMAR DCG
2014-06-20 18:47 ` Murali Karicheri
2014-06-20 18:47 ` Murali Karicheri
2014-06-20 18:47 ` Murali Karicheri
2014-06-10 18:51 ` [PATCH v2 3/8] PCI: designware: update pcie core driver to work with dw hw version 3.65 Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-18 7:13 ` Mohit KUMAR DCG
2014-06-18 7:13 ` Mohit KUMAR DCG
2014-06-20 17:27 ` Murali Karicheri
2014-06-20 17:27 ` Murali Karicheri
2014-06-20 17:27 ` Murali Karicheri
2014-06-20 17:29 ` Santosh Shilimkar
2014-06-20 17:29 ` Santosh Shilimkar
2014-06-10 18:51 ` [PATCH v2 4/8] PCI: designware: add msi controller functions for v3.65 hw Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-18 7:16 ` Mohit KUMAR DCG
2014-06-18 7:16 ` Mohit KUMAR DCG
2014-06-10 18:51 ` [PATCH v2 5/8] PCI: designware: add PCI controller functions for v3.65 DW hw Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` [PATCH v2 6/8] phy: Add serdes phy driver for keystone Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` [PATCH v2 7/8] PCI: keystone: add pcie driver based on designware core driver Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` [PATCH v2 8/8] ARM: keystone: add pcie related options Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-10 18:51 ` Murali Karicheri
2014-06-18 0:08 ` [PATCH v2 0/8] Add Keystone PCIe controller driver Bjorn Helgaas
2014-06-18 0:08 ` Bjorn Helgaas
2014-06-18 0:31 ` Jingoo Han
2014-06-18 0:31 ` Jingoo Han
2014-06-20 15:31 ` Murali Karicheri
2014-06-20 15:31 ` Murali Karicheri
2014-06-20 15:31 ` Murali Karicheri
2014-06-20 17:11 ` Santosh Shilimkar
2014-06-20 17:11 ` Santosh Shilimkar
2014-06-20 19:05 ` Arnd Bergmann
2014-06-20 19:05 ` Arnd Bergmann
2014-06-23 5:32 ` Pratyush Anand
2014-06-23 5:32 ` Pratyush Anand
[not found] ` <53A85ACE.9070506@ti.com>
2014-06-24 16:08 ` Murali Karicheri
2014-06-24 16:08 ` Murali Karicheri
2014-06-24 16:58 ` Murali Karicheri
2014-06-24 16:58 ` Murali Karicheri
2014-06-23 1:44 ` Jingoo Han
2014-06-23 1:44 ` Jingoo Han
2014-06-18 10:14 ` Mohit KUMAR DCG
2014-06-18 10:14 ` Mohit KUMAR DCG
2014-06-20 17:03 ` Murali Karicheri
2014-06-20 21:17 ` Murali Karicheri [this message]
2014-06-20 21:17 ` Murali Karicheri
2014-06-20 21:17 ` Murali Karicheri
2014-06-23 5:13 ` Pratyush Anand
2014-06-23 5:13 ` Pratyush Anand
2014-06-23 5:13 ` Pratyush Anand
[not found] ` <53A85AAC.4070401@ti.com>
2014-06-24 16:21 ` Murali Karicheri
2014-06-24 16:21 ` Murali Karicheri
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=53A4A4D3.1000908@ti.com \
--to=m-karicheri2@ti.com \
--cc=Mohit.KUMAR@st.com \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=grant.likely@linaro.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=jg1.han@samsung.com \
--cc=kishon@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=marex@denx.de \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=pratyush.anand@st.com \
--cc=r65037@freescale.com \
--cc=rdunlap@infradead.org \
--cc=robh+dt@kernel.org \
--cc=santosh.shilimkar@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 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.