All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jim Lin <jilin@nvidia.com>
To: Rhyland Klein <rklein@nvidia.com>
Cc: Peter De Schrijver <pdeschrijver@nvidia.com>,
	Mike Turquette <mturquette@linaro.org>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	"Alexandre Courbot" <gnurou@gmail.com>,
	<linux-clk@vger.kernel.org>, <linux-tegra@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v4 02/20] clk: tegra: periph: add new periph clks and muxes for Tegra210
Date: Wed, 6 May 2015 19:20:32 +0800	[thread overview]
Message-ID: <5549F900.2050600@nvidia.com> (raw)
In-Reply-To: <1430757460-9478-3-git-send-email-rklein@nvidia.com>

On 05/05/2015 12:37 AM, Rhyland Klein wrote:
> Tegra210 has significant differences in muxes for peripheral clocks.
> One of the most important changes is that pll_m isn't to be used
> as a source for peripherals. Therefore, we need to define the new
> muxes and new clocks to use those muxes for Tegra210 support.
>
> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
> ---
>   drivers/clk/tegra/clk-id.h           |   57 +++++++-
>   drivers/clk/tegra/clk-tegra-periph.c |  257 +++++++++++++++++++++++++++++++++-
>   2 files changed, 312 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clk/tegra/clk-id.h b/drivers/clk/tegra/clk-id.h
> index 60738cc954cb..ac6eaba5cc6e 100644
>
>   
> diff --git a/drivers/clk/tegra/clk-tegra-periph.c b/drivers/clk/tegra/clk-tegra-periph.c
> index 46af9244ba74..bde7286bb16b 100644
> --- a/drivers/clk/tegra/clk-tegra-periph.c
> +++ b/drivers/clk/tegra/clk-tegra-periph.c
>
> @@ -303,12 +386,93 @@ static const char *mux_pllm_pllc_pllp_plla[] = {
>   #define mux_pllm_pllc_pllp_plla_idx mux_pllp_pllc_pllm_clkm_idx
>   
>   static const char *mux_pllp_pllc_clkm[] = {
> -	"pll_p", "pll_c", "pll_m"
> +	"pll_p", "pll_c", "clk_m"
>   };
>   static u32 mux_pllp_pllc_clkm_idx[] = {
>   	[0] = 0, [1] = 1, [2] = 3,
>   };
>   
> +static const char *mux_pllp_pllc_clkm_1[] = {
> +	"pll_p", "pll_c", "clk_m"
> +};
> +static u32 mux_pllp_pllc_clkm_1_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 5,
> +};
> +
> +static const char *mux_pllp_pllc_plla_clkm[] = {
> +	"pll_p", "pll_c", "pll_a_out0", "clk_m"
> +};
> +static u32 mux_pllp_pllc_plla_clkm_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 4, [3] = 6,
> +};
> +
> +static const char *mux_pllp_pllc_pllc4_out0_pllc4_out1_clkm_pllc4_out2[] = {
> +	"pll_p", "pll_c", "pll_c4_out0", "pll_c4_out1", "clk_m", "pll_c4_out2"
> +};
> +static u32 mux_pllp_pllc_pllc4_out0_pllc4_out1_clkm_pllc4_out2_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 3, [3] = 5, [4] = 6, [5] = 7,
> +};
> +
> +static const char *
> +mux_pllp_pllc_pllc_out1_pllc4_out2_pllc4_out1_clkm_pllc4_out0[] = {
> +	"pll_p", "pll_c_out1", "pll_c", "pll_c4_out2", "pll_c4_out1",
> +	"clk_m", "pll_c4_out0"
> +};
> +static u32
> +mux_pllp_pllc_pllc_out1_pllc4_out2_pllc4_out1_clkm_pllc4_out0_idx[] = {
> +	[0] = 0, [1] = 1, [2] = 2, [3] = 4, [4] = 5, [5] = 6, [6] = 7,
> +};
> +
> +static const char *mux_pllp_pllc4_out2_pllc4_out1_clkm_pllc4_out0[] = {
> +	"pll_p", "pll_c4_out2", "pll_c4_out1", "clk_m", "pll_c4_out0"
> +};
> +static u32 mux_pllp_pllc4_out2_pllc4_out1_clkm_pllc4_out0_idx[] = {
> +	[0] = 0, [1] = 3, [2] = 4, [3] = 6, [4] = 7,
> +};
> +
> +static const char *mux_pllp_clkm_pllc4_out2_out1_out0_lj[] = {
> +	"pll_p",
> +	"pll_c4_out2", "pll_c4_out0",	/* LJ input */
> +	"pll_c4_out2", "pll_c4_out1",
> +	"pll_c4_out1",			/* LJ input */
> +	"clk_m", "pll_c4_out0"
> +};
> +#define mux_pllp_clkm_pllc4_out2_out1_out0_lj_idx NULL
> +
> +static const char *mux_pllp_pllc2_c_c3_clkm[] = {
> +	"pll_p", "pll_c2", "pll_c", "pll_c3", "clk_m"
> +};
> +static u32 mux_pllp_pllc2_c_c3_clkm_idx[] = {
> +	[0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 6,
> +};
> +
> +static const char *mux_pllp_clkm_clk32_plle[] = {
> +	"pll_p", "clk_m", "clk_32k", "pll_e"
> +};
> +static u32 mux_pllp_clkm_clk32_plle_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 4, [3] = 6,
> +};
> +
> +static const char *mux_pllp_pllp_out3_clkm_clk32k_plla[] = {
> +	"pll_p", "pll_p_out3", "clk_m", "clk_32k", "pll_a_out0"
> +};
> +#define mux_pllp_pllp_out3_clkm_clk32k_plla_idx NULL
> +
> +static const char *mux_pllp_out3_clkm_pllp_pllc4[] = {
> +	"pll_p_out3", "clk_m", "pll_p", "pll_c4_out0", "pll_c4_out1",
> +	"pll_c4_out2"
> +};
> +static u32 mux_pllp_out3_clkm_pllp_pllc4_idx[] = {
> +	[0] = 0, [1] = 3, [2] = 4, [3] = 5, [4] = 6, [5] = 7,
> +};
> +
> +static const char *mux_clkm_pllp_pllre[] = {
> +	"clk_m", "pll_p_out_xusb", "pll_re_out"
> +};
> +static u32 mux_clkm_pllp_pllre_idx[] = {
> +	[0] = 0, [1] = 1, [2] = 5,
> +};
> +
>   static const char *mux_pllp_pllc_clkm_clk32[] = {
>   	"pll_p", "pll_c", "clk_m", "clk_32k"
>   };
> @@ -333,6 +497,11 @@ static u32 mux_clkm_48M_pllp_480M_idx[] = {
>   	[0] = 0, [1] = 2, [2] = 4, [3] = 6,
>   };
>   
> +static const char *mux_clkm_pllre_clk32_480M[] = {
> +	"clk_m", "pll_re_out", "clk_32k", "pll_u_480M"
> +};
> +#define mux_clkm_pllre_clk32_480M_idx NULL
Please help to replace above

#define mux_clkm_pllre_clk32_480M_idx NULL

with

static u32 mux_clkm_pllre_clk32_480M_idx[] = {

        [0] = 0, [1] = 1, [2] = 2, [3] = 3,
};


Thanks.

> +
>   static const char *mux_clkm_pllre_clk32_480M_pllc_ref[] = {
>   	"clk_m", "pll_re_out", "clk_32k", "pll_u_480M", "pll_c", "pll_ref"
>   };
>
--nvpublic

WARNING: multiple messages have this Message-ID (diff)
From: Jim Lin <jilin@nvidia.com>
To: Rhyland Klein <rklein@nvidia.com>
Cc: Peter De Schrijver <pdeschrijver@nvidia.com>,
	Mike Turquette <mturquette@linaro.org>,
	Stephen Warren <swarren@wwwdotorg.org>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Thierry Reding <thierry.reding@gmail.com>,
	Alexandre Courbot <gnurou@gmail.com>,
	linux-clk@vger.kernel.org, linux-tegra@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 02/20] clk: tegra: periph: add new periph clks and muxes for Tegra210
Date: Wed, 6 May 2015 19:20:32 +0800	[thread overview]
Message-ID: <5549F900.2050600@nvidia.com> (raw)
In-Reply-To: <1430757460-9478-3-git-send-email-rklein@nvidia.com>

On 05/05/2015 12:37 AM, Rhyland Klein wrote:
> Tegra210 has significant differences in muxes for peripheral clocks.
> One of the most important changes is that pll_m isn't to be used
> as a source for peripherals. Therefore, we need to define the new
> muxes and new clocks to use those muxes for Tegra210 support.
>
> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
> ---
>   drivers/clk/tegra/clk-id.h           |   57 +++++++-
>   drivers/clk/tegra/clk-tegra-periph.c |  257 +++++++++++++++++++++++++++++++++-
>   2 files changed, 312 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clk/tegra/clk-id.h b/drivers/clk/tegra/clk-id.h
> index 60738cc954cb..ac6eaba5cc6e 100644
>
>   
> diff --git a/drivers/clk/tegra/clk-tegra-periph.c b/drivers/clk/tegra/clk-tegra-periph.c
> index 46af9244ba74..bde7286bb16b 100644
> --- a/drivers/clk/tegra/clk-tegra-periph.c
> +++ b/drivers/clk/tegra/clk-tegra-periph.c
>
> @@ -303,12 +386,93 @@ static const char *mux_pllm_pllc_pllp_plla[] = {
>   #define mux_pllm_pllc_pllp_plla_idx mux_pllp_pllc_pllm_clkm_idx
>   
>   static const char *mux_pllp_pllc_clkm[] = {
> -	"pll_p", "pll_c", "pll_m"
> +	"pll_p", "pll_c", "clk_m"
>   };
>   static u32 mux_pllp_pllc_clkm_idx[] = {
>   	[0] = 0, [1] = 1, [2] = 3,
>   };
>   
> +static const char *mux_pllp_pllc_clkm_1[] = {
> +	"pll_p", "pll_c", "clk_m"
> +};
> +static u32 mux_pllp_pllc_clkm_1_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 5,
> +};
> +
> +static const char *mux_pllp_pllc_plla_clkm[] = {
> +	"pll_p", "pll_c", "pll_a_out0", "clk_m"
> +};
> +static u32 mux_pllp_pllc_plla_clkm_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 4, [3] = 6,
> +};
> +
> +static const char *mux_pllp_pllc_pllc4_out0_pllc4_out1_clkm_pllc4_out2[] = {
> +	"pll_p", "pll_c", "pll_c4_out0", "pll_c4_out1", "clk_m", "pll_c4_out2"
> +};
> +static u32 mux_pllp_pllc_pllc4_out0_pllc4_out1_clkm_pllc4_out2_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 3, [3] = 5, [4] = 6, [5] = 7,
> +};
> +
> +static const char *
> +mux_pllp_pllc_pllc_out1_pllc4_out2_pllc4_out1_clkm_pllc4_out0[] = {
> +	"pll_p", "pll_c_out1", "pll_c", "pll_c4_out2", "pll_c4_out1",
> +	"clk_m", "pll_c4_out0"
> +};
> +static u32
> +mux_pllp_pllc_pllc_out1_pllc4_out2_pllc4_out1_clkm_pllc4_out0_idx[] = {
> +	[0] = 0, [1] = 1, [2] = 2, [3] = 4, [4] = 5, [5] = 6, [6] = 7,
> +};
> +
> +static const char *mux_pllp_pllc4_out2_pllc4_out1_clkm_pllc4_out0[] = {
> +	"pll_p", "pll_c4_out2", "pll_c4_out1", "clk_m", "pll_c4_out0"
> +};
> +static u32 mux_pllp_pllc4_out2_pllc4_out1_clkm_pllc4_out0_idx[] = {
> +	[0] = 0, [1] = 3, [2] = 4, [3] = 6, [4] = 7,
> +};
> +
> +static const char *mux_pllp_clkm_pllc4_out2_out1_out0_lj[] = {
> +	"pll_p",
> +	"pll_c4_out2", "pll_c4_out0",	/* LJ input */
> +	"pll_c4_out2", "pll_c4_out1",
> +	"pll_c4_out1",			/* LJ input */
> +	"clk_m", "pll_c4_out0"
> +};
> +#define mux_pllp_clkm_pllc4_out2_out1_out0_lj_idx NULL
> +
> +static const char *mux_pllp_pllc2_c_c3_clkm[] = {
> +	"pll_p", "pll_c2", "pll_c", "pll_c3", "clk_m"
> +};
> +static u32 mux_pllp_pllc2_c_c3_clkm_idx[] = {
> +	[0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 6,
> +};
> +
> +static const char *mux_pllp_clkm_clk32_plle[] = {
> +	"pll_p", "clk_m", "clk_32k", "pll_e"
> +};
> +static u32 mux_pllp_clkm_clk32_plle_idx[] = {
> +	[0] = 0, [1] = 2, [2] = 4, [3] = 6,
> +};
> +
> +static const char *mux_pllp_pllp_out3_clkm_clk32k_plla[] = {
> +	"pll_p", "pll_p_out3", "clk_m", "clk_32k", "pll_a_out0"
> +};
> +#define mux_pllp_pllp_out3_clkm_clk32k_plla_idx NULL
> +
> +static const char *mux_pllp_out3_clkm_pllp_pllc4[] = {
> +	"pll_p_out3", "clk_m", "pll_p", "pll_c4_out0", "pll_c4_out1",
> +	"pll_c4_out2"
> +};
> +static u32 mux_pllp_out3_clkm_pllp_pllc4_idx[] = {
> +	[0] = 0, [1] = 3, [2] = 4, [3] = 5, [4] = 6, [5] = 7,
> +};
> +
> +static const char *mux_clkm_pllp_pllre[] = {
> +	"clk_m", "pll_p_out_xusb", "pll_re_out"
> +};
> +static u32 mux_clkm_pllp_pllre_idx[] = {
> +	[0] = 0, [1] = 1, [2] = 5,
> +};
> +
>   static const char *mux_pllp_pllc_clkm_clk32[] = {
>   	"pll_p", "pll_c", "clk_m", "clk_32k"
>   };
> @@ -333,6 +497,11 @@ static u32 mux_clkm_48M_pllp_480M_idx[] = {
>   	[0] = 0, [1] = 2, [2] = 4, [3] = 6,
>   };
>   
> +static const char *mux_clkm_pllre_clk32_480M[] = {
> +	"clk_m", "pll_re_out", "clk_32k", "pll_u_480M"
> +};
> +#define mux_clkm_pllre_clk32_480M_idx NULL
Please help to replace above

#define mux_clkm_pllre_clk32_480M_idx NULL

with

static u32 mux_clkm_pllre_clk32_480M_idx[] = {

        [0] = 0, [1] = 1, [2] = 2, [3] = 3,
};


Thanks.

> +
>   static const char *mux_clkm_pllre_clk32_480M_pllc_ref[] = {
>   	"clk_m", "pll_re_out", "clk_32k", "pll_u_480M", "pll_c", "pll_ref"
>   };
>
--nvpublic

  parent reply	other threads:[~2015-05-06 11:20 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-04 16:37 [PATCH v4 00/20] Tegra210 Clock Support Rhyland Klein
2015-05-04 16:37 ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 01/20] clk: tegra: Modify tegra_audio_clk_init to accept more plls Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 18:05   ` Benson Leung
2015-05-04 18:05     ` Benson Leung
2015-05-07 15:15   ` Thierry Reding
2015-05-07 15:15     ` Thierry Reding
2015-05-07 15:49     ` Rhyland Klein
2015-05-07 15:49       ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 02/20] clk: tegra: periph: add new periph clks and muxes for Tegra210 Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 19:45   ` Benson Leung
2015-05-04 19:45     ` Benson Leung
2015-05-05 20:14     ` Rhyland Klein
2015-05-05 20:14       ` Rhyland Klein
2015-05-06 13:59       ` Thierry Reding
2015-05-06 16:24         ` Rhyland Klein
2015-05-06 16:24           ` Rhyland Klein
2015-05-04 21:19   ` Andrew Bresticker
2015-05-04 21:19     ` Andrew Bresticker
2015-05-06 11:20   ` Jim Lin [this message]
2015-05-06 11:20     ` Jim Lin
2015-05-06 14:15     ` Thierry Reding
2015-05-06 16:20       ` Rhyland Klein
2015-05-06 16:20         ` Rhyland Klein
2015-05-06 14:12   ` Thierry Reding
2015-05-04 16:37 ` [PATCH v4 03/20] clk: tegra: pll: add tegra_pll_wait_for_lock to clk header Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 04/20] clk: tegra: pll: simplify clk_enable_path Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 20:11   ` Benson Leung
2015-05-04 16:37 ` [PATCH v4 05/20] clk: tegra: pll: update warning msg Rhyland Klein
2015-05-04 20:20   ` Benson Leung
2015-05-04 20:20     ` Benson Leung
2015-05-04 16:37 ` [PATCH v4 06/20] clk: tegra: pll-params: change misc_reg count from 3 -> 6 Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 20:35   ` Benson Leung
2015-05-04 20:35     ` Benson Leung
2015-05-06 14:18     ` Thierry Reding
2015-05-06 14:18       ` Thierry Reding
2015-05-04 16:37 ` [PATCH v4 07/20] clk: tegra: pll: Don't unconditionally set LOCK flags Rhyland Klein
2015-05-04 21:42   ` Benson Leung
2015-05-04 21:42     ` Benson Leung
2015-05-04 16:37 ` [PATCH v4 08/20] clk: tegra: pll: Add logic for handling SDM data Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 23:01   ` Benson Leung
2015-05-04 23:01     ` Benson Leung
2015-05-05 19:16     ` Rhyland Klein
2015-05-05 19:16       ` Rhyland Klein
2015-05-06 13:57       ` Thierry Reding
2015-05-06 16:16         ` Rhyland Klein
2015-05-06 16:16           ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 09/20] clk: tegra: pll: Add logic for SS Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 23:11   ` Benson Leung
2015-05-04 23:11     ` Benson Leung
2015-05-05 20:15     ` Rhyland Klein
2015-05-05 20:15       ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 10/20] clk: tegra: pll: Add logic for out-of-table rates for T210 Rhyland Klein
2015-05-04 23:34   ` Benson Leung
2015-05-04 23:34     ` Benson Leung
2015-05-05 19:55     ` Rhyland Klein
2015-05-05 19:55       ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 11/20] clk: tegra: pll: Add code to handle if resets are supported by PLL Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-05 17:15   ` Benson Leung
2015-05-04 16:37 ` [PATCH v4 12/20] clk: tegra: pll: Add specialized logic for T210 Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-07 15:11   ` Thierry Reding
2015-05-04 16:37 ` [PATCH v4 13/20] clk: tegra: pll: Add support for PLLMB " Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 14/20] clk: tegra: pll: Adjust vco_min if SDM present Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 15/20] clk: tegra: pll: Add dyn_ramp callback Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 16/20] clk: tegra: pll: Add Set_default logic Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 17/20] clk: tegra: pll: Fix _pll_ramp_calc_pll logic and _calc_dynamic_ramp_rate Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 18/20] clk: tegra: Add Super Gen5 Logic Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-04 16:37 ` [PATCH v4 19/20] clk: tegra210: add support for Tegra210 clocks Rhyland Klein
2015-05-04 16:37   ` Rhyland Klein
2015-05-06 14:51   ` Thierry Reding
2015-05-06 16:18     ` Rhyland Klein
2015-05-06 16:18       ` Rhyland Klein
2015-05-06 17:21     ` Rhyland Klein
2015-05-06 17:21       ` Rhyland Klein
2015-05-07 15:16       ` Thierry Reding
2015-05-07 15:16         ` Thierry Reding
2015-05-07 10:39   ` Jim Lin
2015-05-07 10:39     ` Jim Lin
2015-05-07 16:07     ` Rhyland Klein
2015-05-07 16:07       ` Rhyland Klein
2015-05-07 15:18   ` Thierry Reding
2015-05-04 16:37 ` [PATCH v4 20/20] clk: tegra: pll: Fix issues with rates for VCO PLLs Rhyland Klein
2015-05-05 13:14 ` [PATCH v4 00/20] Tegra210 Clock Support Thierry Reding
2015-05-05 13:14   ` Thierry Reding
2015-05-05 15:55   ` Rhyland Klein
2015-05-05 15:55     ` Rhyland Klein
2015-05-06 13:37     ` Thierry Reding
2015-05-06 16:10       ` Rhyland Klein
2015-05-06 16:10         ` Rhyland Klein

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=5549F900.2050600@nvidia.com \
    --to=jilin@nvidia.com \
    --cc=gnurou@gmail.com \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mturquette@linaro.org \
    --cc=pdeschrijver@nvidia.com \
    --cc=rklein@nvidia.com \
    --cc=sboyd@codeaurora.org \
    --cc=swarren@wwwdotorg.org \
    --cc=thierry.reding@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.