All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
@ 2021-07-04 13:59 ` Jagan Teki
  0 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2021-07-04 13:59 UTC (permalink / raw)
  To: Yannick Fertre, Philippe Cornu, Benjamin Gaignard
  Cc: dri-devel, linux-stm32, linux-arm-kernel, linux-amarula, Jagan Teki

As dw-mipi-dsi supported all possible ways to find the DSI
devices. It can take multiple iterations for ltdc to find
all components attached to the DSI bridge.

The current ltdc driver failed to find the endpoint as
it returned -EINVAL for the first iteration itself. This leads
to following error:

[    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0

So, check the return value and cleanup the encoder only if it's
not -EPROBE_DEFER. This make all components in the attached DSI
bridge found properly.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
 drivers/gpu/drm/stm/ltdc.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
index 08b71248044d..95e983d3ffb5 100644
--- a/drivers/gpu/drm/stm/ltdc.c
+++ b/drivers/gpu/drm/stm/ltdc.c
@@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device *ddev, struct drm_bridge *bridge)
 
 	ret = drm_bridge_attach(encoder, bridge, NULL, 0);
 	if (ret) {
-		drm_encoder_cleanup(encoder);
-		return -EINVAL;
+		if (ret != -EPROBE_DEFER)
+			drm_encoder_cleanup(encoder);
+		return ret;
 	}
 
 	DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
@@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
 		if (bridge) {
 			ret = ltdc_encoder_init(ddev, bridge);
 			if (ret) {
-				DRM_ERROR("init encoder endpoint %d\n", i);
+				if (ret != -EPROBE_DEFER)
+					DRM_ERROR("init encoder endpoint %d\n", i);
 				goto err;
 			}
 		}
-- 
2.25.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
@ 2021-07-04 13:59 ` Jagan Teki
  0 siblings, 0 replies; 8+ messages in thread
From: Jagan Teki @ 2021-07-04 13:59 UTC (permalink / raw)
  To: Yannick Fertre, Philippe Cornu, Benjamin Gaignard
  Cc: linux-arm-kernel, linux-amarula, linux-stm32, dri-devel, Jagan Teki

As dw-mipi-dsi supported all possible ways to find the DSI
devices. It can take multiple iterations for ltdc to find
all components attached to the DSI bridge.

The current ltdc driver failed to find the endpoint as
it returned -EINVAL for the first iteration itself. This leads
to following error:

[    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0

So, check the return value and cleanup the encoder only if it's
not -EPROBE_DEFER. This make all components in the attached DSI
bridge found properly.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
 drivers/gpu/drm/stm/ltdc.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
index 08b71248044d..95e983d3ffb5 100644
--- a/drivers/gpu/drm/stm/ltdc.c
+++ b/drivers/gpu/drm/stm/ltdc.c
@@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device *ddev, struct drm_bridge *bridge)
 
 	ret = drm_bridge_attach(encoder, bridge, NULL, 0);
 	if (ret) {
-		drm_encoder_cleanup(encoder);
-		return -EINVAL;
+		if (ret != -EPROBE_DEFER)
+			drm_encoder_cleanup(encoder);
+		return ret;
 	}
 
 	DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
@@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
 		if (bridge) {
 			ret = ltdc_encoder_init(ddev, bridge);
 			if (ret) {
-				DRM_ERROR("init encoder endpoint %d\n", i);
+				if (ret != -EPROBE_DEFER)
+					DRM_ERROR("init encoder endpoint %d\n", i);
 				goto err;
 			}
 		}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
  2021-07-04 13:59 ` Jagan Teki
@ 2021-07-07 16:18   ` yannick Fertre
  -1 siblings, 0 replies; 8+ messages in thread
From: yannick Fertre @ 2021-07-07 16:18 UTC (permalink / raw)
  To: Jagan Teki, Philippe Cornu, Benjamin Gaignard
  Cc: dri-devel, linux-stm32, linux-arm-kernel, linux-amarula

Hi Jagan,

thanks for the patch.

Tested-by: Yannick Fertre <yannick.fertre@foss.st.com>


On 7/4/21 3:59 PM, Jagan Teki wrote:
> As dw-mipi-dsi supported all possible ways to find the DSI
> devices. It can take multiple iterations for ltdc to find
> all components attached to the DSI bridge.
> 
> The current ltdc driver failed to find the endpoint as
> it returned -EINVAL for the first iteration itself. This leads
> to following error:
> 
> [    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0
> 
> So, check the return value and cleanup the encoder only if it's
> not -EPROBE_DEFER. This make all components in the attached DSI
> bridge found properly.
> 
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
>   drivers/gpu/drm/stm/ltdc.c | 8 +++++---
>   1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 08b71248044d..95e983d3ffb5 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device *ddev, struct drm_bridge *bridge)
>   
>   	ret = drm_bridge_attach(encoder, bridge, NULL, 0);
>   	if (ret) {
> -		drm_encoder_cleanup(encoder);
> -		return -EINVAL;
> +		if (ret != -EPROBE_DEFER)
> +			drm_encoder_cleanup(encoder);
> +		return ret;
>   	}
>   
>   	DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
> @@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
>   		if (bridge) {
>   			ret = ltdc_encoder_init(ddev, bridge);
>   			if (ret) {
> -				DRM_ERROR("init encoder endpoint %d\n", i);
> +				if (ret != -EPROBE_DEFER)
> +					DRM_ERROR("init encoder endpoint %d\n", i);
>   				goto err;
>   			}
>   		}
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
@ 2021-07-07 16:18   ` yannick Fertre
  0 siblings, 0 replies; 8+ messages in thread
From: yannick Fertre @ 2021-07-07 16:18 UTC (permalink / raw)
  To: Jagan Teki, Philippe Cornu, Benjamin Gaignard
  Cc: linux-arm-kernel, linux-amarula, linux-stm32, dri-devel

Hi Jagan,

thanks for the patch.

Tested-by: Yannick Fertre <yannick.fertre@foss.st.com>


On 7/4/21 3:59 PM, Jagan Teki wrote:
> As dw-mipi-dsi supported all possible ways to find the DSI
> devices. It can take multiple iterations for ltdc to find
> all components attached to the DSI bridge.
> 
> The current ltdc driver failed to find the endpoint as
> it returned -EINVAL for the first iteration itself. This leads
> to following error:
> 
> [    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0
> 
> So, check the return value and cleanup the encoder only if it's
> not -EPROBE_DEFER. This make all components in the attached DSI
> bridge found properly.
> 
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
>   drivers/gpu/drm/stm/ltdc.c | 8 +++++---
>   1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 08b71248044d..95e983d3ffb5 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device *ddev, struct drm_bridge *bridge)
>   
>   	ret = drm_bridge_attach(encoder, bridge, NULL, 0);
>   	if (ret) {
> -		drm_encoder_cleanup(encoder);
> -		return -EINVAL;
> +		if (ret != -EPROBE_DEFER)
> +			drm_encoder_cleanup(encoder);
> +		return ret;
>   	}
>   
>   	DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
> @@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
>   		if (bridge) {
>   			ret = ltdc_encoder_init(ddev, bridge);
>   			if (ret) {
> -				DRM_ERROR("init encoder endpoint %d\n", i);
> +				if (ret != -EPROBE_DEFER)
> +					DRM_ERROR("init encoder endpoint %d\n", i);
>   				goto err;
>   			}
>   		}
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
  2021-07-04 13:59 ` Jagan Teki
@ 2021-07-13 16:43   ` Philippe CORNU
  -1 siblings, 0 replies; 8+ messages in thread
From: Philippe CORNU @ 2021-07-13 16:43 UTC (permalink / raw)
  To: Jagan Teki, Yannick Fertre, Benjamin Gaignard
  Cc: dri-devel, linux-stm32, linux-arm-kernel, linux-amarula

Hi Jagan,

On 7/4/21 3:59 PM, Jagan Teki wrote:
> As dw-mipi-dsi supported all possible ways to find the DSI
> devices. It can take multiple iterations for ltdc to find
> all components attached to the DSI bridge.
> 
> The current ltdc driver failed to find the endpoint as
> it returned -EINVAL for the first iteration itself. This leads
> to following error:
> 
> [    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0
> 
> So, check the return value and cleanup the encoder only if it's
> not -EPROBE_DEFER. This make all components in the attached DSI
> bridge found properly.
> 
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
>   drivers/gpu/drm/stm/ltdc.c | 8 +++++---
>   1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 08b71248044d..95e983d3ffb5 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device *ddev, struct drm_bridge *bridge)
>   
>   	ret = drm_bridge_attach(encoder, bridge, NULL, 0);
>   	if (ret) {
> -		drm_encoder_cleanup(encoder);
> -		return -EINVAL;
> +		if (ret != -EPROBE_DEFER)
> +			drm_encoder_cleanup(encoder);

Many thanks for your patch.

This means that we are counting on the future success of the deferred 
probe because we do not clean the encoder...
However, Yannick gave his "Tested-by" and this patch seems useful so

Acked-by: Philippe Cornu <philippe.cornu@foss.st.com>

I will merge it friday or early next week,

Thank you
Philippe :-)


> +		return ret;
>   	}
>   
>   	DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
> @@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
>   		if (bridge) {
>   			ret = ltdc_encoder_init(ddev, bridge);
>   			if (ret) {
> -				DRM_ERROR("init encoder endpoint %d\n", i);
> +				if (ret != -EPROBE_DEFER)
> +					DRM_ERROR("init encoder endpoint %d\n", i);
>   				goto err;
>   			}
>   		}
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
@ 2021-07-13 16:43   ` Philippe CORNU
  0 siblings, 0 replies; 8+ messages in thread
From: Philippe CORNU @ 2021-07-13 16:43 UTC (permalink / raw)
  To: Jagan Teki, Yannick Fertre, Benjamin Gaignard
  Cc: linux-arm-kernel, linux-amarula, linux-stm32, dri-devel

Hi Jagan,

On 7/4/21 3:59 PM, Jagan Teki wrote:
> As dw-mipi-dsi supported all possible ways to find the DSI
> devices. It can take multiple iterations for ltdc to find
> all components attached to the DSI bridge.
> 
> The current ltdc driver failed to find the endpoint as
> it returned -EINVAL for the first iteration itself. This leads
> to following error:
> 
> [    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0
> 
> So, check the return value and cleanup the encoder only if it's
> not -EPROBE_DEFER. This make all components in the attached DSI
> bridge found properly.
> 
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
>   drivers/gpu/drm/stm/ltdc.c | 8 +++++---
>   1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 08b71248044d..95e983d3ffb5 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device *ddev, struct drm_bridge *bridge)
>   
>   	ret = drm_bridge_attach(encoder, bridge, NULL, 0);
>   	if (ret) {
> -		drm_encoder_cleanup(encoder);
> -		return -EINVAL;
> +		if (ret != -EPROBE_DEFER)
> +			drm_encoder_cleanup(encoder);

Many thanks for your patch.

This means that we are counting on the future success of the deferred 
probe because we do not clean the encoder...
However, Yannick gave his "Tested-by" and this patch seems useful so

Acked-by: Philippe Cornu <philippe.cornu@foss.st.com>

I will merge it friday or early next week,

Thank you
Philippe :-)


> +		return ret;
>   	}
>   
>   	DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
> @@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
>   		if (bridge) {
>   			ret = ltdc_encoder_init(ddev, bridge);
>   			if (ret) {
> -				DRM_ERROR("init encoder endpoint %d\n", i);
> +				if (ret != -EPROBE_DEFER)
> +					DRM_ERROR("init encoder endpoint %d\n", i);
>   				goto err;
>   			}
>   		}
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
  2021-07-13 16:43   ` Philippe CORNU
@ 2021-07-19 13:40     ` Philippe CORNU
  -1 siblings, 0 replies; 8+ messages in thread
From: Philippe CORNU @ 2021-07-19 13:40 UTC (permalink / raw)
  To: Jagan Teki, Yannick Fertre, Benjamin Gaignard
  Cc: dri-devel, linux-stm32, linux-arm-kernel, linux-amarula



On 7/13/21 6:43 PM, Philippe CORNU wrote:
> Hi Jagan,
> 
> On 7/4/21 3:59 PM, Jagan Teki wrote:
>> As dw-mipi-dsi supported all possible ways to find the DSI
>> devices. It can take multiple iterations for ltdc to find
>> all components attached to the DSI bridge.
>>
>> The current ltdc driver failed to find the endpoint as
>> it returned -EINVAL for the first iteration itself. This leads
>> to following error:
>>
>> [    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0
>>
>> So, check the return value and cleanup the encoder only if it's
>> not -EPROBE_DEFER. This make all components in the attached DSI
>> bridge found properly.
>>
>> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
>> ---
>>   drivers/gpu/drm/stm/ltdc.c | 8 +++++---
>>   1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
>> index 08b71248044d..95e983d3ffb5 100644
>> --- a/drivers/gpu/drm/stm/ltdc.c
>> +++ b/drivers/gpu/drm/stm/ltdc.c
>> @@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device 
>> *ddev, struct drm_bridge *bridge)
>>       ret = drm_bridge_attach(encoder, bridge, NULL, 0);
>>       if (ret) {
>> -        drm_encoder_cleanup(encoder);
>> -        return -EINVAL;
>> +        if (ret != -EPROBE_DEFER)
>> +            drm_encoder_cleanup(encoder);
> 
> Many thanks for your patch.
> 
> This means that we are counting on the future success of the deferred 
> probe because we do not clean the encoder...
> However, Yannick gave his "Tested-by" and this patch seems useful so
> 
> Acked-by: Philippe Cornu <philippe.cornu@foss.st.com>
> 
> I will merge it friday or early next week,
> 
> Thank you
> Philippe :-)
> 
> 
>> +        return ret;
>>       }
>>       DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
>> @@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
>>           if (bridge) {
>>               ret = ltdc_encoder_init(ddev, bridge);
>>               if (ret) {
>> -                DRM_ERROR("init encoder endpoint %d\n", i);
>> +                if (ret != -EPROBE_DEFER)
>> +                    DRM_ERROR("init encoder endpoint %d\n", i);
>>                   goto err;
>>               }
>>           }
>>

Applied on drm-misc-next.
Many thanks for your patch,
Philippe :-)


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
@ 2021-07-19 13:40     ` Philippe CORNU
  0 siblings, 0 replies; 8+ messages in thread
From: Philippe CORNU @ 2021-07-19 13:40 UTC (permalink / raw)
  To: Jagan Teki, Yannick Fertre, Benjamin Gaignard
  Cc: linux-arm-kernel, linux-amarula, linux-stm32, dri-devel



On 7/13/21 6:43 PM, Philippe CORNU wrote:
> Hi Jagan,
> 
> On 7/4/21 3:59 PM, Jagan Teki wrote:
>> As dw-mipi-dsi supported all possible ways to find the DSI
>> devices. It can take multiple iterations for ltdc to find
>> all components attached to the DSI bridge.
>>
>> The current ltdc driver failed to find the endpoint as
>> it returned -EINVAL for the first iteration itself. This leads
>> to following error:
>>
>> [    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0
>>
>> So, check the return value and cleanup the encoder only if it's
>> not -EPROBE_DEFER. This make all components in the attached DSI
>> bridge found properly.
>>
>> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
>> ---
>>   drivers/gpu/drm/stm/ltdc.c | 8 +++++---
>>   1 file changed, 5 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
>> index 08b71248044d..95e983d3ffb5 100644
>> --- a/drivers/gpu/drm/stm/ltdc.c
>> +++ b/drivers/gpu/drm/stm/ltdc.c
>> @@ -1122,8 +1122,9 @@ static int ltdc_encoder_init(struct drm_device 
>> *ddev, struct drm_bridge *bridge)
>>       ret = drm_bridge_attach(encoder, bridge, NULL, 0);
>>       if (ret) {
>> -        drm_encoder_cleanup(encoder);
>> -        return -EINVAL;
>> +        if (ret != -EPROBE_DEFER)
>> +            drm_encoder_cleanup(encoder);
> 
> Many thanks for your patch.
> 
> This means that we are counting on the future success of the deferred 
> probe because we do not clean the encoder...
> However, Yannick gave his "Tested-by" and this patch seems useful so
> 
> Acked-by: Philippe Cornu <philippe.cornu@foss.st.com>
> 
> I will merge it friday or early next week,
> 
> Thank you
> Philippe :-)
> 
> 
>> +        return ret;
>>       }
>>       DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
>> @@ -1266,7 +1267,8 @@ int ltdc_load(struct drm_device *ddev)
>>           if (bridge) {
>>               ret = ltdc_encoder_init(ddev, bridge);
>>               if (ret) {
>> -                DRM_ERROR("init encoder endpoint %d\n", i);
>> +                if (ret != -EPROBE_DEFER)
>> +                    DRM_ERROR("init encoder endpoint %d\n", i);
>>                   goto err;
>>               }
>>           }
>>

Applied on drm-misc-next.
Many thanks for your patch,
Philippe :-)


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-07-19 13:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-04 13:59 [PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached Jagan Teki
2021-07-04 13:59 ` Jagan Teki
2021-07-07 16:18 ` yannick Fertre
2021-07-07 16:18   ` yannick Fertre
2021-07-13 16:43 ` Philippe CORNU
2021-07-13 16:43   ` Philippe CORNU
2021-07-19 13:40   ` Philippe CORNU
2021-07-19 13:40     ` Philippe CORNU

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.