* [PATCH 0/3] thermal/drivers/imx91: minor updates
@ 2025-12-12 7:51 Peng Fan (OSS)
2025-12-12 7:51 ` [PATCH 1/3] thermal/drivers/imx91: Check status before reading data Peng Fan (OSS)
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Peng Fan (OSS) @ 2025-12-12 7:51 UTC (permalink / raw)
To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Frank Li
Cc: linux-pm, imx, linux-arm-kernel, linux-kernel, Peng Fan
patch 1: wait status ready before reading data
patch 2 and 3: minor cleanup
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
Peng Fan (3):
thermal/drivers/imx91: Check status before reading data
thermal/drivers/imx91: Drop extra spaces
thermal/drivers/imx91: Drop macro for continues mode
drivers/thermal/imx91_thermal.c | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
---
base-commit: 008d3547aae5bc86fac3eda317489169c3fda112
change-id: 20251211-imx91-thermal-a0d185587349
Best regards,
--
Peng Fan <peng.fan@nxp.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/3] thermal/drivers/imx91: Check status before reading data
2025-12-12 7:51 [PATCH 0/3] thermal/drivers/imx91: minor updates Peng Fan (OSS)
@ 2025-12-12 7:51 ` Peng Fan (OSS)
2025-12-12 17:25 ` Frank Li
2025-12-12 7:51 ` [PATCH 2/3] thermal/drivers/imx91: Drop extra spaces Peng Fan (OSS)
2025-12-12 7:51 ` [PATCH 3/3] thermal/drivers/imx91: Drop macro for continues mode Peng Fan (OSS)
2 siblings, 1 reply; 7+ messages in thread
From: Peng Fan (OSS) @ 2025-12-12 7:51 UTC (permalink / raw)
To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Frank Li
Cc: linux-pm, imx, linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Per periodic mode from reference mannual:
Write 1b to CTRL1[START]. Wait until STATm[DRDYn] becomes 1.
Read DATAn[DATA_VAL]. It clears the corresponding STATm[DRDYn].
DATAn[DATA_VAL] and STATm[DRDYn_IF] keep refreshing at a periodic interval
of time, corresponding to PERIOD_CTRL[MEAS_FREQ].
Need to check STAT[DRDY] before reading the DATA register.
And check the returned temperature to make sure it fits into the supported
range (-40°C to +125°C).
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/thermal/imx91_thermal.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/thermal/imx91_thermal.c b/drivers/thermal/imx91_thermal.c
index 9b20be03d6dec18553967548d0ca31d1c1fb387c..77e8e6a921c6af308b830c36721293c007256ca6 100644
--- a/drivers/thermal/imx91_thermal.c
+++ b/drivers/thermal/imx91_thermal.c
@@ -108,10 +108,20 @@ static int imx91_tmu_get_temp(struct thermal_zone_device *tz, int *temp)
{
struct imx91_tmu *tmu = thermal_zone_device_priv(tz);
s16 data;
+ int ret;
+ u32 val;
+
+ ret = readl_relaxed_poll_timeout(tmu->base + IMX91_TMU_STAT0, val,
+ val & IMX91_TMU_STAT0_DRDY0_IF_MASK, 1000,
+ 40000);
+ if (ret)
+ return -EAGAIN;
/* DATA0 is 16bit signed number */
data = readw_relaxed(tmu->base + IMX91_TMU_DATA0);
*temp = imx91_tmu_to_mcelsius(data);
+ if (*temp < IMX91_TMU_TEMP_LOW_LIMIT || *temp > IMX91_TMU_TEMP_HIGH_LIMIT)
+ return -EAGAIN;
return 0;
}
--
2.37.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] thermal/drivers/imx91: Drop extra spaces
2025-12-12 7:51 [PATCH 0/3] thermal/drivers/imx91: minor updates Peng Fan (OSS)
2025-12-12 7:51 ` [PATCH 1/3] thermal/drivers/imx91: Check status before reading data Peng Fan (OSS)
@ 2025-12-12 7:51 ` Peng Fan (OSS)
2025-12-12 17:29 ` Frank Li
2025-12-12 7:51 ` [PATCH 3/3] thermal/drivers/imx91: Drop macro for continues mode Peng Fan (OSS)
2 siblings, 1 reply; 7+ messages in thread
From: Peng Fan (OSS) @ 2025-12-12 7:51 UTC (permalink / raw)
To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Frank Li
Cc: linux-pm, imx, linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
Unify the code style, drop extra spaces for the macros.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/thermal/imx91_thermal.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/drivers/thermal/imx91_thermal.c b/drivers/thermal/imx91_thermal.c
index 77e8e6a921c6af308b830c36721293c007256ca6..768c5acc384eca1c2203098bd4749628d9ffb8e6 100644
--- a/drivers/thermal/imx91_thermal.c
+++ b/drivers/thermal/imx91_thermal.c
@@ -22,17 +22,17 @@
#define REG_TOG 0xc
#define IMX91_TMU_CTRL0 0x0
-#define IMX91_TMU_CTRL0_THR1_IE BIT(9)
-#define IMX91_TMU_CTRL0_THR1_MASK GENMASK(3, 2)
-#define IMX91_TMU_CTRL0_CLR_FLT1 BIT(21)
+#define IMX91_TMU_CTRL0_THR1_IE BIT(9)
+#define IMX91_TMU_CTRL0_THR1_MASK GENMASK(3, 2)
+#define IMX91_TMU_CTRL0_CLR_FLT1 BIT(21)
#define IMX91_TMU_THR_MODE_LE 0
#define IMX91_TMU_THR_MODE_GE 1
#define IMX91_TMU_STAT0 0x10
-#define IMX91_TMU_STAT0_THR1_IF BIT(9)
-#define IMX91_TMU_STAT0_THR1_STAT BIT(13)
-#define IMX91_TMU_STAT0_DRDY0_IF_MASK BIT(16)
+#define IMX91_TMU_STAT0_THR1_IF BIT(9)
+#define IMX91_TMU_STAT0_THR1_STAT BIT(13)
+#define IMX91_TMU_STAT0_DRDY0_IF_MASK BIT(16)
#define IMX91_TMU_DATA0 0x20
@@ -42,12 +42,12 @@
#define IMX91_TMU_CTRL1_STOP BIT(29)
#define IMX91_TMU_CTRL1_RES_MASK GENMASK(19, 18)
#define IMX91_TMU_CTRL1_MEAS_MODE_MASK GENMASK(25, 24)
-#define IMX91_TMU_CTRL1_MEAS_MODE_SINGLE 0
-#define IMX91_TMU_CTRL1_MEAS_MODE_CONTINUES 1
-#define IMX91_TMU_CTRL1_MEAS_MODE_PERIODIC 2
+#define IMX91_TMU_CTRL1_MEAS_MODE_SINGLE 0
+#define IMX91_TMU_CTRL1_MEAS_MODE_CONTINUES 1
+#define IMX91_TMU_CTRL1_MEAS_MODE_PERIODIC 2
#define IMX91_TMU_THR_CTRL01 0x30
-#define IMX91_TMU_THR_CTRL01_THR1_MASK GENMASK(31, 16)
+#define IMX91_TMU_THR_CTRL01_THR1_MASK GENMASK(31, 16)
#define IMX91_TMU_REF_DIV 0x280
#define IMX91_TMU_DIV_EN BIT(31)
@@ -67,7 +67,7 @@
#define IMX91_TMU_DEFAULT_TRIM2_CONFIG 0x65d4
#define IMX91_TMU_PERIOD_CTRL 0x270
-#define IMX91_TMU_PERIOD_CTRL_MEAS_MASK GENMASK(23, 0)
+#define IMX91_TMU_PERIOD_CTRL_MEAS_MASK GENMASK(23, 0)
#define IMX91_TMP_FRAC 64
--
2.37.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] thermal/drivers/imx91: Drop macro for continues mode
2025-12-12 7:51 [PATCH 0/3] thermal/drivers/imx91: minor updates Peng Fan (OSS)
2025-12-12 7:51 ` [PATCH 1/3] thermal/drivers/imx91: Check status before reading data Peng Fan (OSS)
2025-12-12 7:51 ` [PATCH 2/3] thermal/drivers/imx91: Drop extra spaces Peng Fan (OSS)
@ 2025-12-12 7:51 ` Peng Fan (OSS)
2 siblings, 0 replies; 7+ messages in thread
From: Peng Fan (OSS) @ 2025-12-12 7:51 UTC (permalink / raw)
To: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Frank Li
Cc: linux-pm, imx, linux-arm-kernel, linux-kernel, Peng Fan
From: Peng Fan <peng.fan@nxp.com>
i.MX91 TMU measure mode register definition as below:
00b Single One-Shot Measurement
01b Reserved
10b Periodic One-Shot Measurement
11b Reserved
Drop the definition of continues mode which does not exists.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
drivers/thermal/imx91_thermal.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/thermal/imx91_thermal.c b/drivers/thermal/imx91_thermal.c
index 768c5acc384eca1c2203098bd4749628d9ffb8e6..aa45eb83f9c7b58badd596d2d433592a9ee9e041 100644
--- a/drivers/thermal/imx91_thermal.c
+++ b/drivers/thermal/imx91_thermal.c
@@ -43,7 +43,6 @@
#define IMX91_TMU_CTRL1_RES_MASK GENMASK(19, 18)
#define IMX91_TMU_CTRL1_MEAS_MODE_MASK GENMASK(25, 24)
#define IMX91_TMU_CTRL1_MEAS_MODE_SINGLE 0
-#define IMX91_TMU_CTRL1_MEAS_MODE_CONTINUES 1
#define IMX91_TMU_CTRL1_MEAS_MODE_PERIODIC 2
#define IMX91_TMU_THR_CTRL01 0x30
--
2.37.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] thermal/drivers/imx91: Check status before reading data
2025-12-12 7:51 ` [PATCH 1/3] thermal/drivers/imx91: Check status before reading data Peng Fan (OSS)
@ 2025-12-12 17:25 ` Frank Li
2025-12-15 1:36 ` Peng Fan
0 siblings, 1 reply; 7+ messages in thread
From: Frank Li @ 2025-12-12 17:25 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
linux-pm, imx, linux-arm-kernel, linux-kernel, Peng Fan
On Fri, Dec 12, 2025 at 03:51:14PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Per periodic mode from reference mannual:
> Write 1b to CTRL1[START]. Wait until STATm[DRDYn] becomes 1.
> Read DATAn[DATA_VAL]. It clears the corresponding STATm[DRDYn].
> DATAn[DATA_VAL] and STATm[DRDYn_IF] keep refreshing at a periodic interval
> of time, corresponding to PERIOD_CTRL[MEAS_FREQ].
It should get last time sample value without check DRDYn_IF bit. it should
only be a PERIOD_CTRL[MEAS_FREQ] delay.
worst case get value at previous's PERIOD_CTRL[MEAS_FREQ] sample.
PERIOD_CTRL[MEAS_FREQ] is quite short compare to call get_temp frequency.
Do you get invalidate data?
>
> Need to check STAT[DRDY] before reading the DATA register.
>
> And check the returned temperature to make sure it fits into the supported
> range (-40°C to +125°C).
https://lore.kernel.org/imx/aAIkAF_AHta8_vuS@mai.linaro.org/
Do you answer Daniel Lezcano's question
""When the measured temperature can be out of limits ?" at v6 resend
patch.
Frank
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> drivers/thermal/imx91_thermal.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/thermal/imx91_thermal.c b/drivers/thermal/imx91_thermal.c
> index 9b20be03d6dec18553967548d0ca31d1c1fb387c..77e8e6a921c6af308b830c36721293c007256ca6 100644
> --- a/drivers/thermal/imx91_thermal.c
> +++ b/drivers/thermal/imx91_thermal.c
> @@ -108,10 +108,20 @@ static int imx91_tmu_get_temp(struct thermal_zone_device *tz, int *temp)
> {
> struct imx91_tmu *tmu = thermal_zone_device_priv(tz);
> s16 data;
> + int ret;
> + u32 val;
> +
> + ret = readl_relaxed_poll_timeout(tmu->base + IMX91_TMU_STAT0, val,
> + val & IMX91_TMU_STAT0_DRDY0_IF_MASK, 1000,
> + 40000);
> + if (ret)
> + return -EAGAIN;
>
> /* DATA0 is 16bit signed number */
> data = readw_relaxed(tmu->base + IMX91_TMU_DATA0);
> *temp = imx91_tmu_to_mcelsius(data);
> + if (*temp < IMX91_TMU_TEMP_LOW_LIMIT || *temp > IMX91_TMU_TEMP_HIGH_LIMIT)
> + return -EAGAIN;
>
> return 0;
> }
>
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 2/3] thermal/drivers/imx91: Drop extra spaces
2025-12-12 7:51 ` [PATCH 2/3] thermal/drivers/imx91: Drop extra spaces Peng Fan (OSS)
@ 2025-12-12 17:29 ` Frank Li
0 siblings, 0 replies; 7+ messages in thread
From: Frank Li @ 2025-12-12 17:29 UTC (permalink / raw)
To: Peng Fan (OSS)
Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
linux-pm, imx, linux-arm-kernel, linux-kernel, Peng Fan
On Fri, Dec 12, 2025 at 03:51:15PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
>
> Unify the code style, drop extra spaces for the macros.
>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> drivers/thermal/imx91_thermal.c | 22 +++++++++++-----------
> 1 file changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/thermal/imx91_thermal.c b/drivers/thermal/imx91_thermal.c
> index 77e8e6a921c6af308b830c36721293c007256ca6..768c5acc384eca1c2203098bd4749628d9ffb8e6 100644
> --- a/drivers/thermal/imx91_thermal.c
> +++ b/drivers/thermal/imx91_thermal.c
> @@ -22,17 +22,17 @@
> #define REG_TOG 0xc
>
> #define IMX91_TMU_CTRL0 0x0
> -#define IMX91_TMU_CTRL0_THR1_IE BIT(9)
> -#define IMX91_TMU_CTRL0_THR1_MASK GENMASK(3, 2)
> -#define IMX91_TMU_CTRL0_CLR_FLT1 BIT(21)
> +#define IMX91_TMU_CTRL0_THR1_IE BIT(9)
> +#define IMX91_TMU_CTRL0_THR1_MASK GENMASK(3, 2)
> +#define IMX91_TMU_CTRL0_CLR_FLT1 BIT(21)
It is used for register field. Many new driver use this style.
#define REGISTER_NAME
#define REGISTER_FIELD
So register defination looks like tree. Reader can quick search field and
register name.
Frank
>
> #define IMX91_TMU_THR_MODE_LE 0
> #define IMX91_TMU_THR_MODE_GE 1
>
> #define IMX91_TMU_STAT0 0x10
> -#define IMX91_TMU_STAT0_THR1_IF BIT(9)
> -#define IMX91_TMU_STAT0_THR1_STAT BIT(13)
> -#define IMX91_TMU_STAT0_DRDY0_IF_MASK BIT(16)
> +#define IMX91_TMU_STAT0_THR1_IF BIT(9)
> +#define IMX91_TMU_STAT0_THR1_STAT BIT(13)
> +#define IMX91_TMU_STAT0_DRDY0_IF_MASK BIT(16)
>
> #define IMX91_TMU_DATA0 0x20
>
> @@ -42,12 +42,12 @@
> #define IMX91_TMU_CTRL1_STOP BIT(29)
> #define IMX91_TMU_CTRL1_RES_MASK GENMASK(19, 18)
> #define IMX91_TMU_CTRL1_MEAS_MODE_MASK GENMASK(25, 24)
> -#define IMX91_TMU_CTRL1_MEAS_MODE_SINGLE 0
> -#define IMX91_TMU_CTRL1_MEAS_MODE_CONTINUES 1
> -#define IMX91_TMU_CTRL1_MEAS_MODE_PERIODIC 2
> +#define IMX91_TMU_CTRL1_MEAS_MODE_SINGLE 0
> +#define IMX91_TMU_CTRL1_MEAS_MODE_CONTINUES 1
> +#define IMX91_TMU_CTRL1_MEAS_MODE_PERIODIC 2
>
> #define IMX91_TMU_THR_CTRL01 0x30
> -#define IMX91_TMU_THR_CTRL01_THR1_MASK GENMASK(31, 16)
> +#define IMX91_TMU_THR_CTRL01_THR1_MASK GENMASK(31, 16)
>
> #define IMX91_TMU_REF_DIV 0x280
> #define IMX91_TMU_DIV_EN BIT(31)
> @@ -67,7 +67,7 @@
> #define IMX91_TMU_DEFAULT_TRIM2_CONFIG 0x65d4
>
> #define IMX91_TMU_PERIOD_CTRL 0x270
> -#define IMX91_TMU_PERIOD_CTRL_MEAS_MASK GENMASK(23, 0)
> +#define IMX91_TMU_PERIOD_CTRL_MEAS_MASK GENMASK(23, 0)
>
> #define IMX91_TMP_FRAC 64
>
>
> --
> 2.37.1
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/3] thermal/drivers/imx91: Check status before reading data
2025-12-12 17:25 ` Frank Li
@ 2025-12-15 1:36 ` Peng Fan
0 siblings, 0 replies; 7+ messages in thread
From: Peng Fan @ 2025-12-15 1:36 UTC (permalink / raw)
To: Frank Li
Cc: Rafael J. Wysocki, Daniel Lezcano, Zhang Rui, Lukasz Luba,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
linux-pm, imx, linux-arm-kernel, linux-kernel, Peng Fan
On Fri, Dec 12, 2025 at 12:25:48PM -0500, Frank Li wrote:
>On Fri, Dec 12, 2025 at 03:51:14PM +0800, Peng Fan (OSS) wrote:
>> From: Peng Fan <peng.fan@nxp.com>
>>
>> Per periodic mode from reference mannual:
>> Write 1b to CTRL1[START]. Wait until STATm[DRDYn] becomes 1.
>> Read DATAn[DATA_VAL]. It clears the corresponding STATm[DRDYn].
>> DATAn[DATA_VAL] and STATm[DRDYn_IF] keep refreshing at a periodic interval
>> of time, corresponding to PERIOD_CTRL[MEAS_FREQ].
>
>It should get last time sample value without check DRDYn_IF bit. it should
>only be a PERIOD_CTRL[MEAS_FREQ] delay.
>
>worst case get value at previous's PERIOD_CTRL[MEAS_FREQ] sample.
>
>PERIOD_CTRL[MEAS_FREQ] is quite short compare to call get_temp frequency.
>
>Do you get invalidate data?
No, this is just to align what we tested in LTS tree.
It should be fine to use last value, so drop this patch.
Thanks,
Peng
>
>>
>> Need to check STAT[DRDY] before reading the DATA register.
>>
>> And check the returned temperature to make sure it fits into the supported
>> range (-40°C to +125°C).
>
>https://lore.kernel.org/imx/aAIkAF_AHta8_vuS@mai.linaro.org/
>
>Do you answer Daniel Lezcano's question
> ""When the measured temperature can be out of limits ?" at v6 resend
>patch.
>
>Frank
>>
>> Signed-off-by: Peng Fan <peng.fan@nxp.com>
>> ---
>> drivers/thermal/imx91_thermal.c | 10 ++++++++++
>> 1 file changed, 10 insertions(+)
>>
>> diff --git a/drivers/thermal/imx91_thermal.c b/drivers/thermal/imx91_thermal.c
>> index 9b20be03d6dec18553967548d0ca31d1c1fb387c..77e8e6a921c6af308b830c36721293c007256ca6 100644
>> --- a/drivers/thermal/imx91_thermal.c
>> +++ b/drivers/thermal/imx91_thermal.c
>> @@ -108,10 +108,20 @@ static int imx91_tmu_get_temp(struct thermal_zone_device *tz, int *temp)
>> {
>> struct imx91_tmu *tmu = thermal_zone_device_priv(tz);
>> s16 data;
>> + int ret;
>> + u32 val;
>> +
>> + ret = readl_relaxed_poll_timeout(tmu->base + IMX91_TMU_STAT0, val,
>> + val & IMX91_TMU_STAT0_DRDY0_IF_MASK, 1000,
>> + 40000);
>> + if (ret)
>> + return -EAGAIN;
>>
>> /* DATA0 is 16bit signed number */
>> data = readw_relaxed(tmu->base + IMX91_TMU_DATA0);
>> *temp = imx91_tmu_to_mcelsius(data);
>> + if (*temp < IMX91_TMU_TEMP_LOW_LIMIT || *temp > IMX91_TMU_TEMP_HIGH_LIMIT)
>> + return -EAGAIN;
>>
>> return 0;
>> }
>>
>> --
>> 2.37.1
>>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-12-15 1:35 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-12 7:51 [PATCH 0/3] thermal/drivers/imx91: minor updates Peng Fan (OSS)
2025-12-12 7:51 ` [PATCH 1/3] thermal/drivers/imx91: Check status before reading data Peng Fan (OSS)
2025-12-12 17:25 ` Frank Li
2025-12-15 1:36 ` Peng Fan
2025-12-12 7:51 ` [PATCH 2/3] thermal/drivers/imx91: Drop extra spaces Peng Fan (OSS)
2025-12-12 17:29 ` Frank Li
2025-12-12 7:51 ` [PATCH 3/3] thermal/drivers/imx91: Drop macro for continues mode Peng Fan (OSS)
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.