From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> To: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Cc: Hans Verkuil <hverkuil@xs4all.nl>, Sylwester Nawrocki <s.nawrocki@samsung.com>, Sylwester Nawrocki <sylvester.nawrocki@gmail.com>, linux-media@vger.kernel.org, devicetree-discuss@lists.ozlabs.org, Magnus Damm <magnus.damm@gmail.com>, linux-sh@vger.kernel.org, Mark Brown <broonie@opensource.wolfsonmicro.com>, Stephen Warren <swarren@wwwdotorg.org>, Arnd Bergmann <arnd@arndb.de>, Grant Likely <grant.likely@secretlab.ca> Subject: Re: [PATCH 05/14] media: add a V4L2 OF parser Date: Mon, 08 Oct 2012 21:30:58 +0000 [thread overview] Message-ID: <12735748.ZBbT3nyMls@avalon> (raw) In-Reply-To: <Pine.LNX.4.64.1210051250210.13761@axis700.grange> On Friday 05 October 2012 12:58:21 Guennadi Liakhovetski wrote: > On Fri, 5 Oct 2012, Hans Verkuil wrote: > > On Tue October 2 2012 12:13:20 Sylwester Nawrocki wrote: > > > On 10/02/2012 11:49 AM, Guennadi Liakhovetski wrote: > > > >>> + if (!of_property_read_u32_array(node, "data-lanes", data_lanes, > > > >>> + ARRAY_SIZE(data_lanes))) { > > > >>> + int i; > > > >>> + for (i = 0; i< ARRAY_SIZE(data_lanes); i++) > > > >>> + link->mipi_csi_2.data_lanes[i] = data_lanes[i]; > > > >> > > > >> It doesn't look like what we aimed for. The data-lanes array is > > > >> supposed to be of variable length, thus I don't think it can be > > > >> parsed like that. Or am I missing something ? I think we need more > > > >> something like below > > > > > > > >> (based on of_property_read_u32_array(), not tested): > > > > Ok, you're right, that my version only was suitable for fixed-size > > > > arrays, which wasn't our goal. But I don't think we should go down to > > > > manually parsing property data. How about (tested;-)) > > > > > > > > data = of_find_property(node, "data-lanes", NULL); > > > > if (data) { > > > > > > > > int i = 0; > > > > const __be32 *lane = NULL; > > > > do { > > > > > > > > lane = of_prop_next_u32(data, lane, &data_lanes[i]); > > > > > > > > } while (lane && i++ < ARRAY_SIZE(data_lanes)); > > > > link->mipi_csi_2.num_data_lanes = i; > > > > while (i--) > > > > > > > > link->mipi_csi_2.data_lanes[i] = data_lanes[i]; > > > > > > > > } > > > > > > Yes, that looks neat and does what it is supposed to do. :) Thanks! > > > For now, I'll trust you it works ;) > > > > > > With regards to the remaining patches, it looks a bit scary to me how > > > complicated it got, perhaps mostly because of requirement to reference > > > host devices from subdevs. And it seems to rely on the existing SoC > > > camera infrastructure, which might imply lot's of work need to be done > > > for non soc-camera drivers. But I'm going to take a closer look and > > > comment more on the details at the corresponding patches. > > > > I have to say that I agree with Sylwester here. It seems awfully > > complicated, but I can't really put my finger on the actual cause. > > Well, which exactly part? The V4L2 OF part is quite simple. > > > It would be really interesting to see this implemented for a non-SoC > > device and to compare the two. > > Sure, volunteers? ;-) In principle, if I find time, I could try to convert > sh_vou, which is also interesting, because it's an output driver. The OMAP3 ISP is on my to-do list, but that depends on the generic clock availability on the OMAP3, so I have to wait. > > One area that I do not yet completely understand is the i2c bus > > notifications (or asynchronous loading or i2c modules). > > > > I would have expected that using OF the i2c devices are still initialized > > before the host/bridge driver is initialized. But I gather that's not the > > case? > > No, it's not. I'm not sure, whether it depends on the order of devices in > the .dts, but, I think, it's better to not have to mandate a certain order > and I also seem to have seen devices being registered in different order > with the same DT, but I'm not 100% sure about that. > > > If this deferred probing is a general problem, then I think we need a > > general solution as well that's part of the v4l2 core. > > That can be done, perhaps. But we can do it as a next step. As soon as > we're happy with the OF implementation as such, we can commit that, > possibly leaving soc-camera patches out for now, then we can think where > to put async I2C handling. I agree that async I2C handling should have V4L2 core helpers, otherwise it's going to be pretty complex for ISP drivers. -- Regards, Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com> To: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Cc: Hans Verkuil <hverkuil@xs4all.nl>, Sylwester Nawrocki <s.nawrocki@samsung.com>, Sylwester Nawrocki <sylvester.nawrocki@gmail.com>, linux-media@vger.kernel.org, devicetree-discuss@lists.ozlabs.org, Magnus Damm <magnus.damm@gmail.com>, linux-sh@vger.kernel.org, Mark Brown <broonie@opensource.wolfsonmicro.com>, Stephen Warren <swarren@wwwdotorg.org>, Arnd Bergmann <arnd@arndb.de>, Grant Likely <grant.likely@secretlab.ca> Subject: Re: [PATCH 05/14] media: add a V4L2 OF parser Date: Mon, 08 Oct 2012 23:30:58 +0200 [thread overview] Message-ID: <12735748.ZBbT3nyMls@avalon> (raw) In-Reply-To: <Pine.LNX.4.64.1210051250210.13761@axis700.grange> On Friday 05 October 2012 12:58:21 Guennadi Liakhovetski wrote: > On Fri, 5 Oct 2012, Hans Verkuil wrote: > > On Tue October 2 2012 12:13:20 Sylwester Nawrocki wrote: > > > On 10/02/2012 11:49 AM, Guennadi Liakhovetski wrote: > > > >>> + if (!of_property_read_u32_array(node, "data-lanes", data_lanes, > > > >>> + ARRAY_SIZE(data_lanes))) { > > > >>> + int i; > > > >>> + for (i = 0; i< ARRAY_SIZE(data_lanes); i++) > > > >>> + link->mipi_csi_2.data_lanes[i] = data_lanes[i]; > > > >> > > > >> It doesn't look like what we aimed for. The data-lanes array is > > > >> supposed to be of variable length, thus I don't think it can be > > > >> parsed like that. Or am I missing something ? I think we need more > > > >> something like below > > > > > > > >> (based on of_property_read_u32_array(), not tested): > > > > Ok, you're right, that my version only was suitable for fixed-size > > > > arrays, which wasn't our goal. But I don't think we should go down to > > > > manually parsing property data. How about (tested;-)) > > > > > > > > data = of_find_property(node, "data-lanes", NULL); > > > > if (data) { > > > > > > > > int i = 0; > > > > const __be32 *lane = NULL; > > > > do { > > > > > > > > lane = of_prop_next_u32(data, lane, &data_lanes[i]); > > > > > > > > } while (lane && i++ < ARRAY_SIZE(data_lanes)); > > > > link->mipi_csi_2.num_data_lanes = i; > > > > while (i--) > > > > > > > > link->mipi_csi_2.data_lanes[i] = data_lanes[i]; > > > > > > > > } > > > > > > Yes, that looks neat and does what it is supposed to do. :) Thanks! > > > For now, I'll trust you it works ;) > > > > > > With regards to the remaining patches, it looks a bit scary to me how > > > complicated it got, perhaps mostly because of requirement to reference > > > host devices from subdevs. And it seems to rely on the existing SoC > > > camera infrastructure, which might imply lot's of work need to be done > > > for non soc-camera drivers. But I'm going to take a closer look and > > > comment more on the details at the corresponding patches. > > > > I have to say that I agree with Sylwester here. It seems awfully > > complicated, but I can't really put my finger on the actual cause. > > Well, which exactly part? The V4L2 OF part is quite simple. > > > It would be really interesting to see this implemented for a non-SoC > > device and to compare the two. > > Sure, volunteers? ;-) In principle, if I find time, I could try to convert > sh_vou, which is also interesting, because it's an output driver. The OMAP3 ISP is on my to-do list, but that depends on the generic clock availability on the OMAP3, so I have to wait. > > One area that I do not yet completely understand is the i2c bus > > notifications (or asynchronous loading or i2c modules). > > > > I would have expected that using OF the i2c devices are still initialized > > before the host/bridge driver is initialized. But I gather that's not the > > case? > > No, it's not. I'm not sure, whether it depends on the order of devices in > the .dts, but, I think, it's better to not have to mandate a certain order > and I also seem to have seen devices being registered in different order > with the same DT, but I'm not 100% sure about that. > > > If this deferred probing is a general problem, then I think we need a > > general solution as well that's part of the v4l2 core. > > That can be done, perhaps. But we can do it as a next step. As soon as > we're happy with the OF implementation as such, we can commit that, > possibly leaving soc-camera patches out for now, then we can think where > to put async I2C handling. I agree that async I2C handling should have V4L2 core helpers, otherwise it's going to be pretty complex for ISP drivers. -- Regards, Laurent Pinchart
next prev parent reply other threads:[~2012-10-08 21:30 UTC|newest] Thread overview: 202+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-09-27 14:07 [PATCH 00/14] V4L2 DT support Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 01/14] i2c: add dummy inline functions for when CONFIG_OF_I2C(_MODULE) isn't defined Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 02/14] of: add a dummy inline function for when CONFIG_OF is not defined Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-28 11:05 ` [PATCH 15/14] OF: define of_*_cmp() macros also if CONFIG_OF isn't set Guennadi Liakhovetski 2012-09-28 11:05 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 04/14] media: add V4L2 DT binding documentation Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-10-01 20:45 ` Sylwester Nawrocki 2012-10-01 20:45 ` Sylwester Nawrocki [not found] ` <1348754853-28619-5-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org> 2012-10-02 14:15 ` Rob Herring 2012-10-02 14:15 ` Rob Herring 2012-10-02 14:15 ` Rob Herring 2012-10-02 14:33 ` Guennadi Liakhovetski 2012-10-02 14:33 ` Guennadi Liakhovetski 2012-10-03 20:54 ` Rob Herring 2012-10-03 20:54 ` Rob Herring 2012-10-05 9:43 ` Guennadi Liakhovetski 2012-10-05 9:43 ` Guennadi Liakhovetski 2012-10-05 11:31 ` Hans Verkuil 2012-10-05 11:31 ` Hans Verkuil 2012-10-05 11:37 ` Guennadi Liakhovetski 2012-10-05 11:37 ` Guennadi Liakhovetski 2012-10-08 20:00 ` Stephen Warren 2012-10-08 20:00 ` Stephen Warren 2012-10-08 20:59 ` Laurent Pinchart 2012-10-08 21:00 ` Laurent Pinchart 2012-10-08 21:14 ` Guennadi Liakhovetski 2012-10-08 21:14 ` Guennadi Liakhovetski 2012-10-08 21:14 ` Guennadi Liakhovetski 2012-10-09 9:21 ` Hans Verkuil 2012-10-09 9:21 ` Hans Verkuil 2012-10-09 9:29 ` Guennadi Liakhovetski 2012-10-09 9:29 ` Guennadi Liakhovetski 2012-10-05 15:10 ` Sascha Hauer 2012-10-05 15:10 ` Sascha Hauer 2012-10-05 15:10 ` Sascha Hauer 2012-10-05 15:41 ` Guennadi Liakhovetski 2012-10-05 15:41 ` Guennadi Liakhovetski 2012-10-05 16:02 ` Sascha Hauer 2012-10-05 16:02 ` Sascha Hauer 2012-10-08 7:58 ` Guennadi Liakhovetski 2012-10-08 7:58 ` Guennadi Liakhovetski 2012-10-10 8:40 ` Sascha Hauer 2012-10-10 8:40 ` Sascha Hauer 2012-10-10 8:51 ` Mark Brown 2012-10-10 8:51 ` Mark Brown 2012-10-10 9:21 ` Sascha Hauer 2012-10-10 9:21 ` Sascha Hauer 2012-10-10 10:46 ` Mark Brown 2012-10-10 10:46 ` Mark Brown 2012-10-08 20:12 ` Stephen Warren 2012-10-08 20:12 ` Stephen Warren 2012-09-27 14:07 ` [PATCH 05/14] media: add a V4L2 OF parser Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-10-01 21:37 ` Sylwester Nawrocki 2012-10-01 21:37 ` Sylwester Nawrocki 2012-10-02 9:49 ` Guennadi Liakhovetski 2012-10-02 9:49 ` Guennadi Liakhovetski [not found] ` <Pine.LNX.4.64.1210021142210.15778-0199iw4Nj15frtckUFj5Ag@public.gmane.org> 2012-10-02 10:13 ` Sylwester Nawrocki 2012-10-02 10:13 ` Sylwester Nawrocki 2012-10-02 10:13 ` Sylwester Nawrocki 2012-10-02 11:04 ` Guennadi Liakhovetski 2012-10-02 11:04 ` Guennadi Liakhovetski 2012-10-05 10:41 ` Hans Verkuil 2012-10-05 10:41 ` Hans Verkuil 2012-10-05 10:58 ` Guennadi Liakhovetski 2012-10-05 10:58 ` Guennadi Liakhovetski 2012-10-05 11:23 ` Hans Verkuil 2012-10-05 11:23 ` Hans Verkuil 2012-10-05 11:35 ` Guennadi Liakhovetski 2012-10-05 11:35 ` Guennadi Liakhovetski 2012-10-08 12:23 ` Guennadi Liakhovetski 2012-10-08 12:23 ` Guennadi Liakhovetski 2012-10-08 13:48 ` Hans Verkuil 2012-10-08 13:48 ` Hans Verkuil 2012-10-08 14:30 ` Guennadi Liakhovetski 2012-10-08 14:30 ` Guennadi Liakhovetski 2012-10-08 14:53 ` Hans Verkuil 2012-10-08 14:53 ` Hans Verkuil 2012-10-08 15:15 ` Guennadi Liakhovetski 2012-10-08 15:15 ` Guennadi Liakhovetski 2012-10-08 15:41 ` Hans Verkuil 2012-10-08 15:41 ` Hans Verkuil 2012-10-08 15:53 ` Guennadi Liakhovetski 2012-10-08 15:53 ` Guennadi Liakhovetski [not found] ` <Pine.LNX.4.64.1210081748390.14454-0199iw4Nj15frtckUFj5Ag@public.gmane.org> 2012-10-08 16:00 ` Guennadi Liakhovetski 2012-10-08 16:00 ` Guennadi Liakhovetski 2012-10-08 16:00 ` Guennadi Liakhovetski 2012-10-10 13:22 ` Laurent Pinchart 2012-10-10 13:22 ` Laurent Pinchart 2012-10-10 13:18 ` Laurent Pinchart 2012-10-10 13:18 ` Laurent Pinchart 2012-10-10 16:50 ` Stephen Warren 2012-10-10 16:50 ` Stephen Warren 2012-10-10 22:51 ` Laurent Pinchart 2012-10-10 22:51 ` Laurent Pinchart 2012-10-11 16:15 ` Stephen Warren 2012-10-11 16:15 ` Stephen Warren 2012-10-10 13:12 ` Laurent Pinchart 2012-10-10 13:12 ` Laurent Pinchart 2012-10-10 12:54 ` Laurent Pinchart 2012-10-10 12:54 ` Laurent Pinchart 2012-10-10 13:45 ` Mauro Carvalho Chehab 2012-10-10 13:45 ` Mauro Carvalho Chehab 2012-10-10 14:48 ` Laurent Pinchart 2012-10-10 14:48 ` Laurent Pinchart 2012-10-10 14:57 ` Mauro Carvalho Chehab 2012-10-10 14:57 ` Mauro Carvalho Chehab 2012-10-10 15:15 ` Laurent Pinchart 2012-10-10 15:15 ` Laurent Pinchart 2012-10-11 19:48 ` Sakari Ailus 2012-10-11 19:48 ` Sakari Ailus 2012-10-13 0:16 ` Guennadi Liakhovetski 2012-10-13 0:16 ` Guennadi Liakhovetski 2012-10-05 18:30 ` Sylwester Nawrocki 2012-10-05 18:30 ` Sylwester Nawrocki 2012-10-05 18:45 ` Mark Brown 2012-10-05 18:45 ` Mark Brown 2012-10-08 9:40 ` Guennadi Liakhovetski 2012-10-08 9:40 ` Guennadi Liakhovetski 2012-10-09 10:34 ` Sylwester Nawrocki 2012-10-09 10:34 ` Sylwester Nawrocki 2012-10-09 11:00 ` Hans Verkuil 2012-10-09 11:00 ` Hans Verkuil 2012-10-10 13:25 ` Laurent Pinchart 2012-10-10 13:25 ` Laurent Pinchart 2012-10-10 20:23 ` Sylwester Nawrocki 2012-10-10 20:23 ` Sylwester Nawrocki 2012-10-10 20:32 ` Guennadi Liakhovetski 2012-10-10 20:32 ` Guennadi Liakhovetski 2012-10-10 21:12 ` Sylwester Nawrocki 2012-10-10 21:12 ` Sylwester Nawrocki 2012-10-10 23:05 ` Laurent Pinchart 2012-10-10 23:05 ` Laurent Pinchart [not found] ` <5075D947.3080903-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 2012-10-10 22:58 ` Laurent Pinchart 2012-10-10 22:58 ` Laurent Pinchart 2012-10-10 22:58 ` Laurent Pinchart 2012-10-08 21:30 ` Laurent Pinchart [this message] 2012-10-08 21:30 ` Laurent Pinchart 2012-10-08 10:03 ` Sylwester Nawrocki 2012-10-08 10:03 ` Sylwester Nawrocki 2012-09-27 14:07 ` [PATCH 06/14] media: soc-camera: prepare for asynchronous client probing Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 07/14] media: soc-camera: support deferred probing of clients Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2013-04-10 10:38 ` Barry Song 2013-04-10 10:38 ` Barry Song [not found] ` <CAGsJ_4yUY6PE0NWZ9yaOLFmRb3O-HL55=w7Y6muwL0YbkJtP0Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2013-04-10 12:06 ` Guennadi Liakhovetski 2013-04-10 12:06 ` Guennadi Liakhovetski 2013-04-10 12:06 ` Guennadi Liakhovetski 2013-04-10 13:53 ` Barry Song 2013-04-10 13:53 ` Barry Song 2013-04-10 13:56 ` Mark Brown 2013-04-10 13:56 ` Mark Brown 2013-04-10 14:00 ` Barry Song 2013-04-10 14:00 ` Barry Song 2013-04-10 14:03 ` Guennadi Liakhovetski 2013-04-10 14:03 ` Guennadi Liakhovetski 2013-04-10 14:30 ` Barry Song 2013-04-10 14:30 ` Barry Song 2013-04-10 14:43 ` Guennadi Liakhovetski 2013-04-10 14:43 ` Guennadi Liakhovetski 2013-04-10 15:02 ` Barry Song 2013-04-10 15:02 ` Barry Song 2012-09-27 14:07 ` [PATCH 08/14] media: soc-camera: use managed devm_regulator_bulk_get() Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 17:38 ` Sachin Kamat 2012-09-27 17:50 ` Sachin Kamat 2012-09-27 14:07 ` [PATCH 09/14] media: mt9t112: support deferred probing Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski [not found] ` <1348754853-28619-1-git-send-email-g.liakhovetski-Mmb7MZpHnFY@public.gmane.org> 2012-09-27 14:07 ` [PATCH 03/14] OF: make a function pointer argument const Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 10/14] media: soc-camera: support OF cameras Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-10-05 19:11 ` Sylwester Nawrocki 2012-10-05 19:11 ` Sylwester Nawrocki 2012-10-08 8:37 ` Guennadi Liakhovetski 2012-10-08 8:37 ` Guennadi Liakhovetski 2012-10-08 9:28 ` Sylwester Nawrocki 2012-10-08 9:28 ` Sylwester Nawrocki 2013-04-08 9:19 ` Barry Song 2013-04-08 9:19 ` Barry Song [not found] ` <CAGsJ_4zYvF-U0_ETs9EP8i+bOJiJLkXWrJdMNnW_sXU-QwnXQw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2013-04-08 11:21 ` Guennadi Liakhovetski 2013-04-08 11:21 ` Guennadi Liakhovetski 2013-04-08 11:21 ` Guennadi Liakhovetski 2013-04-08 11:49 ` Barry Song 2013-04-08 11:49 ` Barry Song 2012-09-27 14:07 ` [PATCH 11/14] media: sh-mobile-ceu-camera: runtime PM suspending doesn't have to be synchronous Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 12/14] media: sh-mobile-ceu-camera: add primitive OF support Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 13/14] media: sh-mobile-ceu-driver: support max width and height in DT Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-09-27 14:07 ` [PATCH 14/14] media: sh_mobile_ceu_camera: support all standard V4L2 DT properties Guennadi Liakhovetski 2012-09-27 14:07 ` Guennadi Liakhovetski 2012-10-05 12:32 ` [PATCH 00/14] V4L2 DT support Sylwester Nawrocki 2012-10-05 12:32 ` Sylwester Nawrocki 2012-10-05 14:41 ` Guennadi Liakhovetski 2012-10-05 14:41 ` Guennadi Liakhovetski
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=12735748.ZBbT3nyMls@avalon \ --to=laurent.pinchart@ideasonboard.com \ --cc=arnd@arndb.de \ --cc=broonie@opensource.wolfsonmicro.com \ --cc=devicetree-discuss@lists.ozlabs.org \ --cc=g.liakhovetski@gmx.de \ --cc=grant.likely@secretlab.ca \ --cc=hverkuil@xs4all.nl \ --cc=linux-media@vger.kernel.org \ --cc=linux-sh@vger.kernel.org \ --cc=magnus.damm@gmail.com \ --cc=s.nawrocki@samsung.com \ --cc=swarren@wwwdotorg.org \ --cc=sylvester.nawrocki@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: linkBe 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.