[{"id":36380,"web_url":"https://patchwork.libcamera.org/comment/36380/","msgid":"<176106016299.2256500.4139101288853991934@ping.linuxembedded.co.uk>","date":"2025-10-21T15:22:42","subject":"Re: [PATCH v1 1/1] pipeline: imx8-isi: Delay ISI routes config to\n\tacquire() time","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Antoine, Andrei,\n\nQuoting Antoine Bouyer (2025-10-20 13:24:00)\n> From: Andrei Gansari <andrei.gansari@nxp.com>\n> \n> Fixes behavior when calling 'cam -l' during a live stream from a camera\n> in another process.\n> \n> Issue is that multiple process should be able to list (match procedure)\n> the camera supported. But only the unique process that lock the media\n> devices in order to be able to configure then start the pipeline should\n> setup the routes, graphs etc.\n> \n> Thus, the setRouting() is to be moved to a PipelineHandlerISI::acquireDevice()\n> implementation to override the default Pipeline::acquireDevice() function.\n\nOverall I think this is a good thing to aim for... We should definitely\nnot interfere with a running camera just from trying to list them.\n\n> Fixes: 92df79112fb2 (\"pipeline: imx8-isi: Add multicamera support\")\n\nBut I think this 'fixes' patch might be introducing bugs.\n\nPlease review below.\n\n> \n> Signed-off-by: Andrei Gansari <andrei.gansari@nxp.com>\n> Tested-by: Antoine Bouyer <antoine.bouyer@nxp.com>\n> ---\n>  src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 46 +++++++++++++++++---\n>  1 file changed, 40 insertions(+), 6 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n> index de09431cb9b9..26f556bbb819 100644\n> --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n> +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n> @@ -71,6 +71,8 @@ public:\n>  \n>         unsigned int xbarSink_ = 0;\n>         unsigned int xbarSourceOffset_ = 0;\n> +\n> +       const std::string &cameraName() const { return sensor_->entity()->name(); }\n>  };\n>  \n>  class ISICameraConfiguration : public CameraConfiguration\n> @@ -117,6 +119,9 @@ protected:\n>  \n>         int queueRequestDevice(Camera *camera, Request *request) override;\n>  \n> +       bool acquireDevice(Camera *camera) override;\n> +       void releaseDevice(Camera *camera) override;\n> +\n>  private:\n>         static constexpr Size kPreviewSize = { 1920, 1080 };\n>         static constexpr Size kMinISISize = { 1, 1 };\n> @@ -143,6 +148,10 @@ private:\n>  \n>         std::unique_ptr<V4L2Subdevice> crossbar_;\n>         std::vector<Pipe> pipes_;\n> +\n> +       unsigned int acquireCount_ = 0;\n> +\n> +       V4L2Subdevice::Routing routing_ = {};\n>  };\n>  \n>  /* -----------------------------------------------------------------------------\n> @@ -950,6 +959,36 @@ int PipelineHandlerISI::queueRequestDevice(Camera *camera, Request *request)\n>         return 0;\n>  }\n>  \n> +bool PipelineHandlerISI::acquireDevice(Camera *camera)\n> +{\n> +       ISICameraData *data = cameraData(camera);\n> +       int ret;\n> +\n> +       acquireCount_++;\n> +       LOG(ISI, Debug) << \"acquireDevice \" << data->cameraName()\n> +                       << \" count \" << acquireCount_;\n> +\n> +       if (acquireCount_ > 1)\n> +               return true;\n> +\n> +       /* Enable routing for all available sensors once */\n> +       ret = crossbar_->setRouting(&routing_, V4L2Subdevice::ActiveFormat);\n> +       if (ret)\n> +               return ret;\n\nThis function returns a bool, while setRouting returns an error number,\nso I don't think this is doing quite what you intend.\n\nAlso - if we have an error on setting the routing, should we fail to\nacquire the device, and if so - should we keep acquireCount at 0? Or do\nwe have to call releaseDevice() even if acquireDevice fails ?\n\n\n> +\n> +       return true;\n> +}\n> +\n> +void PipelineHandlerISI::releaseDevice(Camera *camera)\n> +{\n> +       ISICameraData *data = cameraData(camera);\n> +\n> +       ASSERT(acquireCount_);\n> +       acquireCount_--;\n> +       LOG(ISI, Debug) << \"releaseDevice \" << data->cameraName()\n> +                       << \" count \" << acquireCount_;\n> +}\n> +\n>  bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>  {\n>         DeviceMatch dm(\"mxc-isi\");\n> @@ -1034,7 +1073,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>         unsigned int numSinks = 0;\n>         const unsigned int xbarFirstSource = crossbar_->entity()->pads().size() - pipes_.size();\n>         const unsigned int maxStreams = pipes_.size() / cameraCount;\n> -       V4L2Subdevice::Routing routing = {};\n>  \n>         for (MediaPad *pad : crossbar_->entity()->pads()) {\n>                 unsigned int sink = numSinks;\n> @@ -1104,7 +1142,7 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>                 /*  Add routes to the crossbar switch routing table. */\n>                 for (unsigned i = 0; i < data->streams_.size(); i++) {\n>                         unsigned int sourcePad = xbarFirstSource + data->xbarSourceOffset_ + i;\n> -                       routing.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 },\n> +                       routing_.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 },\n>                                              V4L2Subdevice::Stream{ sourcePad, 0 },\n>                                              V4L2_SUBDEV_ROUTE_FL_ACTIVE);\n>                 }\n> @@ -1116,10 +1154,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>                 numCameras++;\n>         }\n>  \n> -       ret = crossbar_->setRouting(&routing, V4L2Subdevice::ActiveFormat);\n> -       if (ret)\n> -               return false;\n> -\n>         return numCameras > 0;\n>  }\n>  \n> -- \n> 2.34.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6B2DDC32CE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 21 Oct 2025 15:22:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4A39D60781;\n\tTue, 21 Oct 2025 17:22:47 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 013CF60774\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 21 Oct 2025 17:22:45 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6A806EB4;\n\tTue, 21 Oct 2025 17:21:02 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"cvHz7qtn\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1761060062;\n\tbh=H/hJMghwCUAXwp84Wa4y9YdNvKKseRDjsGy5xspfqc8=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=cvHz7qtn4h+Z88GCrYFevbc6uege6+WL1iaCafetETX4eMEHD41sVM8dFSCXTg1E8\n\tEtMcjkBmCOfGdB9TB1eyanAMnUT9u3ICxeRIwYWzmoX2C3xCQ/2muJ2K4qY7V8xlnq\n\tf7017EK0PRtonTS804wxE8UK86Au4bQI+k0krb0A=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20251020122400.1759110-2-antoine.bouyer@nxp.com>","References":"<20251020122400.1759110-1-antoine.bouyer@nxp.com>\n\t<20251020122400.1759110-2-antoine.bouyer@nxp.com>","Subject":"Re: [PATCH v1 1/1] pipeline: imx8-isi: Delay ISI routes config to\n\tacquire() time","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"julien.vuillaumier@nxp.com, Andrei Gansari <andrei.gansari@nxp.com>,\n\tAntoine Bouyer <antoine.bouyer@nxp.com>","To":"Antoine Bouyer <antoine.bouyer@nxp.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 21 Oct 2025 16:22:42 +0100","Message-ID":"<176106016299.2256500.4139101288853991934@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":36384,"web_url":"https://patchwork.libcamera.org/comment/36384/","msgid":"<2ed7cb07-72ad-422d-9802-f286580c147f@nxp.com>","date":"2025-10-22T08:24:50","subject":"Re: [PATCH v1 1/1] pipeline: imx8-isi: Delay ISI routes config to\n\tacquire() time","submitter":{"id":218,"url":"https://patchwork.libcamera.org/api/people/218/","name":"Antoine Bouyer","email":"antoine.bouyer@nxp.com"},"content":"Hi Kieran\n\nThanks for feedback\n\nOn 21/10/2025 17:22, Kieran Bingham wrote:\n> Caution: This is an external email. Please take care when clicking links or opening attachments. When in doubt, report the message using the 'Report this email' button\n> \n> \n> Hi Antoine, Andrei,\n> \n> Quoting Antoine Bouyer (2025-10-20 13:24:00)\n>> From: Andrei Gansari <andrei.gansari@nxp.com>\n>>\n>> Fixes behavior when calling 'cam -l' during a live stream from a camera\n>> in another process.\n>>\n>> Issue is that multiple process should be able to list (match procedure)\n>> the camera supported. But only the unique process that lock the media\n>> devices in order to be able to configure then start the pipeline should\n>> setup the routes, graphs etc.\n>>\n>> Thus, the setRouting() is to be moved to a PipelineHandlerISI::acquireDevice()\n>> implementation to override the default Pipeline::acquireDevice() function.\n> \n> Overall I think this is a good thing to aim for... We should definitely\n> not interfere with a running camera just from trying to list them.\n> \n>> Fixes: 92df79112fb2 (\"pipeline: imx8-isi: Add multicamera support\")\n> \n> But I think this 'fixes' patch might be introducing bugs.\n> \n> Please review below.\n> \n>>\n>> Signed-off-by: Andrei Gansari <andrei.gansari@nxp.com>\n>> Tested-by: Antoine Bouyer <antoine.bouyer@nxp.com>\n>> ---\n>>   src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 46 +++++++++++++++++---\n>>   1 file changed, 40 insertions(+), 6 deletions(-)\n>>\n>> diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n>> index de09431cb9b9..26f556bbb819 100644\n>> --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n>> +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n>> @@ -71,6 +71,8 @@ public:\n>>\n>>          unsigned int xbarSink_ = 0;\n>>          unsigned int xbarSourceOffset_ = 0;\n>> +\n>> +       const std::string &cameraName() const { return sensor_->entity()->name(); }\n>>   };\n>>\n>>   class ISICameraConfiguration : public CameraConfiguration\n>> @@ -117,6 +119,9 @@ protected:\n>>\n>>          int queueRequestDevice(Camera *camera, Request *request) override;\n>>\n>> +       bool acquireDevice(Camera *camera) override;\n>> +       void releaseDevice(Camera *camera) override;\n>> +\n>>   private:\n>>          static constexpr Size kPreviewSize = { 1920, 1080 };\n>>          static constexpr Size kMinISISize = { 1, 1 };\n>> @@ -143,6 +148,10 @@ private:\n>>\n>>          std::unique_ptr<V4L2Subdevice> crossbar_;\n>>          std::vector<Pipe> pipes_;\n>> +\n>> +       unsigned int acquireCount_ = 0;\n>> +\n>> +       V4L2Subdevice::Routing routing_ = {};\n>>   };\n>>\n>>   /* -----------------------------------------------------------------------------\n>> @@ -950,6 +959,36 @@ int PipelineHandlerISI::queueRequestDevice(Camera *camera, Request *request)\n>>          return 0;\n>>   }\n>>\n>> +bool PipelineHandlerISI::acquireDevice(Camera *camera)\n>> +{\n>> +       ISICameraData *data = cameraData(camera);\n>> +       int ret;\n>> +\n>> +       acquireCount_++;\n>> +       LOG(ISI, Debug) << \"acquireDevice \" << data->cameraName()\n>> +                       << \" count \" << acquireCount_;\n>> +\n>> +       if (acquireCount_ > 1)\n>> +               return true;\n>> +\n>> +       /* Enable routing for all available sensors once */\n>> +       ret = crossbar_->setRouting(&routing_, V4L2Subdevice::ActiveFormat);\n>> +       if (ret)\n>> +               return ret;\n> \n> This function returns a bool, while setRouting returns an error number,\n> so I don't think this is doing quite what you intend.\n\nohh right! Most probably cast-ed to true, which is the opposite of what \nis intended !\n\n> \n> Also - if we have an error on setting the routing, should we fail to\n> acquire the device, and if so - should we keep acquireCount at 0? Or do\n> we have to call releaseDevice() even if acquireDevice fails ?\n\nNeed to rework the logic:\n  - test acquireCount_ is non null instead of > 1\n  - increase counter before returning, only in case of success: i.e. \nafter setRouting without error, or if already non null.\n\nThanks\nAntoine\n\n> \n> \n>> +\n>> +       return true;\n>> +}\n>> +\n>> +void PipelineHandlerISI::releaseDevice(Camera *camera)\n>> +{\n>> +       ISICameraData *data = cameraData(camera);\n>> +\n>> +       ASSERT(acquireCount_);\n>> +       acquireCount_--;\n>> +       LOG(ISI, Debug) << \"releaseDevice \" << data->cameraName()\n>> +                       << \" count \" << acquireCount_;\n>> +}\n>> +\n>>   bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>>   {\n>>          DeviceMatch dm(\"mxc-isi\");\n>> @@ -1034,7 +1073,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>>          unsigned int numSinks = 0;\n>>          const unsigned int xbarFirstSource = crossbar_->entity()->pads().size() - pipes_.size();\n>>          const unsigned int maxStreams = pipes_.size() / cameraCount;\n>> -       V4L2Subdevice::Routing routing = {};\n>>\n>>          for (MediaPad *pad : crossbar_->entity()->pads()) {\n>>                  unsigned int sink = numSinks;\n>> @@ -1104,7 +1142,7 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>>                  /*  Add routes to the crossbar switch routing table. */\n>>                  for (unsigned i = 0; i < data->streams_.size(); i++) {\n>>                          unsigned int sourcePad = xbarFirstSource + data->xbarSourceOffset_ + i;\n>> -                       routing.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 },\n>> +                       routing_.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 },\n>>                                               V4L2Subdevice::Stream{ sourcePad, 0 },\n>>                                               V4L2_SUBDEV_ROUTE_FL_ACTIVE);\n>>                  }\n>> @@ -1116,10 +1154,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n>>                  numCameras++;\n>>          }\n>>\n>> -       ret = crossbar_->setRouting(&routing, V4L2Subdevice::ActiveFormat);\n>> -       if (ret)\n>> -               return false;\n>> -\n>>          return numCameras > 0;\n>>   }\n>>\n>> --\n>> 2.34.1\n>>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id EF1BBBE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 22 Oct 2025 08:22:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 018B460793;\n\tWed, 22 Oct 2025 10:22:57 +0200 (CEST)","from GVXPR05CU001.outbound.protection.outlook.com\n\t(mail-swedencentralazlp170130007.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c202::7])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 61D8260793\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Oct 2025 10:22:55 +0200 (CEST)","from GVXPR04MB9831.eurprd04.prod.outlook.com (2603:10a6:150:11c::8)\n\tby VI1PR04MB7006.eurprd04.prod.outlook.com (2603:10a6:803:137::23)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.11;\n\tWed, 22 Oct 2025 08:22:52 +0000","from GVXPR04MB9831.eurprd04.prod.outlook.com\n\t([fe80::4634:3d9c:c4a:641a]) by\n\tGVXPR04MB9831.eurprd04.prod.outlook.com\n\t([fe80::4634:3d9c:c4a:641a%6]) with mapi id 15.20.9228.016;\n\tWed, 22 Oct 2025 08:22:52 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"DfKRg/AF\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=aW5+yK8f41Idd+1L0Q7KVfCjnLWSaBmJMI679/sNtd6NnCUVlkPsn3tRoj0rPkO6tBAhr8OzlOj7mAXdv9QC+fvN0yerVvos3vr6n3VxUQOI6/o/XU/uhugKYuaQ2XpD2uDpt1JmICPPWBdqoSpnbe2b3BvRVfCMXl/dE8tbG8k/RIV4hQDFytontyFVUcfqelq4tbGWtqr+3K0A0g29kIXrfMc2aCZ2SbWYn9cVolrd5ElZ6gJy1S3YwXgEHDWPfLxm9g21eJm4kQB7qMeWiHf/iwbrC+WB7iSAQJPLlB57wZ2utko9Llc5I/2eX40TAxfiGW1dfhidZJ+tDpwncQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n\tbh=ftt+wiDcuRi8g67FOJ8jKvNTxlp4G12PtVKiB5IVBz0=;\n\tb=x/JXIwNWO0bY9KhiRKUAERrdTvJ5AwMeLLy08qyq3lF8egLuuHayru919Tv49PwtxT3BGglgGPiUu5FDwKdrIU7v5N+Z48esXRxObjeFnohD7fc5UGABZc0jQPKD7h749G0/HJy80phfW/V4I3/g28kOohr0tFrtZnL2xlYpVLWskHCf3nTHpBIcpnby7QIurWLgRymgh4x1Lyr460xnX1UNKKGkzjDJTSgG4WEZhPbBDMab/hDK7a7I6o6OkfPxo61z/TYzMLnbZAugXe+MBqweJN+JCAi2zTXUd75Swm7zLKejr3glwyybE95oOSQVgD8YrhmFBoohDtSKVJKp0Q==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=ftt+wiDcuRi8g67FOJ8jKvNTxlp4G12PtVKiB5IVBz0=;\n\tb=DfKRg/AFJgy7oWFKonYRP0woUNImK4cEWNP1uQEoDPg9+osG5qmV8My8withqDKAfEoksD+Px4DOfuUYRtvamHlUVmyUoS6zIxkupxUxOXC1Zj6nZILntGyGRMWgRpBEZ7SIe0GbbdDkDqr7MTnO0HcMyp2+uSfZRg6/tCYMJJdsKhmlqgIn4cdf664bWTJDvCK3Isu0L38NimuW08kL+T6127q1cjDiw9egcfKpFPfKbmGaCam1C6vsA/pgdXa+gm0/vVcC8EmXae5iRpPWdTYjy0+uyALqnQwrFYQPfC8ZAEsWkciTjwYzqHAY6Txi7yK90OE7yTiavNeM5BxPww==","Message-ID":"<2ed7cb07-72ad-422d-9802-f286580c147f@nxp.com>","Date":"Wed, 22 Oct 2025 10:24:50 +0200","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v1 1/1] pipeline: imx8-isi: Delay ISI routes config to\n\tacquire() time","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Cc":"julien.vuillaumier@nxp.com, Andrei Gansari <andrei.gansari@nxp.com>","References":"<20251020122400.1759110-1-antoine.bouyer@nxp.com>\n\t<20251020122400.1759110-2-antoine.bouyer@nxp.com>\n\t<176106016299.2256500.4139101288853991934@ping.linuxembedded.co.uk>","Content-Language":"en-US","From":"Antoine Bouyer <antoine.bouyer@nxp.com>","In-Reply-To":"<176106016299.2256500.4139101288853991934@ping.linuxembedded.co.uk>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-ClientProxiedBy":"PH8PR02CA0023.namprd02.prod.outlook.com\n\t(2603:10b6:510:2d0::15) To GVXPR04MB9831.eurprd04.prod.outlook.com\n\t(2603:10a6:150:11c::8)","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"GVXPR04MB9831:EE_|VI1PR04MB7006:EE_","X-MS-Office365-Filtering-Correlation-Id":"1d6712d7-2b97-4133-b6bb-08de114431bb","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n\tARA:13230040|366016|1800799024|19092799006|376014; ","X-Microsoft-Antispam-Message-Info":"=?utf-8?q?y6EdKVtY1m/9NBfjnsMdgGOxy+eK?=\n\t=?utf-8?q?54OXTEBF1WYFhsdk3a+BlMPwo7MW0tYmpZ4735TWqJ/6sfiO3H4WH2c1?=\n\t=?utf-8?q?7FQMzTaDqvlJ9S0sfPhgdt5UAb4e/QuidM5lHAv1g1pvmNGdAWpcDQbJ?=\n\t=?utf-8?q?R6DRdbw+GsN3rpwLaK/XHW91QDpimJ0wc7Guy+Fm3bKhXO/xCfF1UEug?=\n\t=?utf-8?q?y4jwznkPCDylSMK5hhzdfac2SXjgQnJtewOIgi5uFeH+dBzHxZe6YAjU?=\n\t=?utf-8?q?Sm+fI1/ybUR588tZMucbvMB0njkbDRk2wqAUb0+65aMH4O75mMsO+SLF?=\n\t=?utf-8?q?PdHVEn3LdxdV447TjNhYUs+seOuDZb/lZo/V3C4zVFNz+F69Kx4JEUC1?=\n\t=?utf-8?q?2muDwMDubbek3E3xR3Fj9Tn1qHAaw6A3DWmmnwIwQXUXgz0b/YdqxqDO?=\n\t=?utf-8?q?0RdLpGuvTNQK6o4DIZ4Dnfo4nkIgQncx3l2oJ9XOGcIvBO+4vzKJyr37?=\n\t=?utf-8?q?tHuSh205r8vzwvEBj3Mys5Rl7ZZE49SPoMSfDmnH7LCXDXQ2iE4nzjbt?=\n\t=?utf-8?q?Kb5OZARySLVHP7G0EN3ujo5k+UqC4KOxoFVGg88682TtPmcktGw8Uj+H?=\n\t=?utf-8?q?bdZfuwFLRSpRc3FPZ7IuZd1pzfTrZ4srFudgqcwlk7MMvalwZqZhPerA?=\n\t=?utf-8?q?QHtGvkklSSJ6t7Wi7wAaRMmpQ5g+6nlH0rey48xKpypcODhFQpLVdqDa?=\n\t=?utf-8?q?aWxM2J/Ed3zz4cMjMDHoC5DO8Db0Lh2gHYtXl5/aUKLl1WNcS8E2iuZY?=\n\t=?utf-8?q?qjbD+a8h7XV/5g/BYSWHj6xY1nxsf+MJnWy0DMqlKL0sSJBapDQ8bSnT?=\n\t=?utf-8?q?Lx2otizbAqwPEuZzr+8tl9LZfkKlh+Eti8YhjEZg5cGtgSwQkgnetJs8?=\n\t=?utf-8?q?XVWNmWfA4/1EIteZ2m3Sit1JlM81OTBa5JM2GkVCdprjCQ9aCwiSwwBY?=\n\t=?utf-8?q?eEkMqfw6hT3f2N8MYR39r7B9b9A6fvMsapC3mppPj2wqYUCZvvh2sjxc?=\n\t=?utf-8?q?6sQgqTflB3bZqdqEgW/m9PGBQNRQgv21AZFXsn//rkZ7DrJ9f4uleGrj?=\n\t=?utf-8?q?2LzPbHP1BpkgnUvtl8Q8yNvAdCEEPrpw2Hjr/TPG2IBDU3A56Dazs31A?=\n\t=?utf-8?q?ePKgit7RDoHzZ+/ys3rVzZlMXvbSe9Y/vMRMdsoygLqUoXSo+aSWCQcY?=\n\t=?utf-8?q?270T5WoPHnhk/yq8KeUg8lrr5svuZLu8c1ATdbfheArzV/k8TQaymANr?=\n\t=?utf-8?q?C+2CBsK9iGWaES+9Ql6rGDk9EcNIMxOBPKzHS04npMnkh+sbSjpubYIm?=\n\t=?utf-8?q?hDB8A4eO09ouS9F2Ory+gLvFPoTIIx2d0QWdIiM1BIIswV7f5q/p04M2?=\n\t=?utf-8?q?DzT7tXDyoP94oktLx14NaVdATOoPnyJZ1bH48jl5IhdOvLzDB85Jpw6S?=\n\t=?utf-8?q?Q9yyE6BfSInTLVrEX2dBAgsE+cQU23nmRPXW1+5wbzGGBU7DT0JL7ws+?=\n\t=?utf-8?q?OL/OFmZMi5GBX90xll3pDHYTc5jDSrCGyBzes+JZl0Qn?=","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:GVXPR04MB9831.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(366016)(1800799024)(19092799006)(376014); DIR:OUT;\n\tSFP:1101; ","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?GKqc12QpH88jXB03BYhX9L+7j?=\n\t=?utf-8?q?IsK2JhykTz1aubZ1ndAHD2xgyq6LyFtyKrypyZlbBan9w6Y7bsZscR5J?=\n\t=?utf-8?q?bHFzo7QNdcdfxbh9Lk8rA8POSN6NH7YwaLJrRqDkHizxfN5ylTS57z3A?=\n\t=?utf-8?q?tsr9M6jISgPXbrMsVRVogrt8ufiYw6nKZsQoCczOpFIJ1+k0+5gt7rt4?=\n\t=?utf-8?q?F43Yd0p9+x8VoB9RQMX3zrmrfW4ZbyGZm1oiImbk2Tw7Q7eNGh3YbY1g?=\n\t=?utf-8?q?5Ju51pyqNfgv40wZOLmtfB2Pw5Y0bEx6zv79P5qeyXyyTrHu4wHA7Hmb?=\n\t=?utf-8?q?39u+qSlL8Q1HznUokkOANZ88mWL+d86rKUzgqQE5O/hah3w7BaJgSqzT?=\n\t=?utf-8?q?+l7ehZhGm+ehinK0H81kQv7P2imvyZQlS7hH53eLCZ5GaPRDaA0h5PzI?=\n\t=?utf-8?q?LSDNALZJD9mVJxG5TzLdMI4BaC8RXTG7xJF/DvnaYzh8Q+XP9QiKkUpr?=\n\t=?utf-8?q?1bCQm6SImnTSAM9d4ittQp3WiQApv3m+X9BiuX9r1URt+gfcLs6UvX5K?=\n\t=?utf-8?q?Ppty5lCNMtMCgD/P0wxdbZ3sP2d4fOhVQoaZYAk/DJkfzw+K4rnexDIr?=\n\t=?utf-8?q?ao9sN4oJJQ97aamnsgGtqYRbYTkCC+Z6PnsNyx7SNeqiKOnaCnDRMypq?=\n\t=?utf-8?q?gwWOUxzzDIhsfBKnPzJLm5fRgtNsakriW5rkS/Vo4yZxrETJe5uanSzU?=\n\t=?utf-8?q?TvGgHfUrusVDZDYPgCDgeIqMA21feZN7mrwabC1UkdBhjMWfDOHOYlrv?=\n\t=?utf-8?q?TPTRfEXsyTX5Io/Kuf6TtbXYhLUmgXg3zWMZHUMideTpfChgW97qhTR3?=\n\t=?utf-8?q?srUMFvkDiWGC7wqlfiTZ3rW08jo3IXSMmLpFMxaJBqnfsp99mabK1pXs?=\n\t=?utf-8?q?p1PG95IbIKTTNcM44AGjMJFp/jbacb2XZSjavtlqAA5Z9UhyF4jDCbEJ?=\n\t=?utf-8?q?pkkkIFTZALCYdEUwbzSXUwXnOPi7bwTTT1BP35uWaZYOOgf/OT0MO/ex?=\n\t=?utf-8?q?VgMeeThoHYGvtrhFt44QJ+PHU1fp+lW4quP9B/Lai3XmGzzfnL4g5txF?=\n\t=?utf-8?q?rNDdsFRmNfodFSzl5rEBGxi6jx/447WcXTgWLHOqlBMM70t2FTl/W5C2?=\n\t=?utf-8?q?n3NbFDY1tRp34uyGbi/GUCIfZCy5JuQiIFgIvHwFcykFCz6hSrLYaCgr?=\n\t=?utf-8?q?XK01TbdurIA8MLwR1VBk/FVLwwIwHb5kR4kQO9n2bb1j2ihmkjDMEtyQ?=\n\t=?utf-8?q?d6BlmckpXmyCPKsCgqJpIKRLtLyZLR6fYWq47GRQi9eOz4l8VgnZvWCg?=\n\t=?utf-8?q?L0zlC9uEFlXhEJAzay59waKgmzsEhxaf/Teovz2fUCMpvaDtBuGGGaYk?=\n\t=?utf-8?q?82RY9DA5ut36i2lxrI3lQ+8vHmB9If7An5TEUaL3pxfU6hN07PKjcZdm?=\n\t=?utf-8?q?pdecmDsB14WM2ie3VvRhtdWKsgiBDUjTQRxk8kAQrbXsoVbUjE9FDH93?=\n\t=?utf-8?q?9M5WIW4fLiZXpn6MxbdHNGl2cpQLGOoj6PHN7Hk5Rki//HehFL4grf/H?=\n\t=?utf-8?q?nF52c3S24fY89G0UTdeg7ozjkcyLTT7z+BTcEw+LYKFRVj8pFiIdwThM?=\n\t=?utf-8?q?KPL6+k6YpnLqREVn38uKqHlAnur4rAOZ8ktLtefwD1AlPKBqKQtlEBGg?=\n\t=?utf-8?q?ASpuimRCIp6VbYdLxo84Pslk/1oow=3D=3D?=","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"1d6712d7-2b97-4133-b6bb-08de114431bb","X-MS-Exchange-CrossTenant-AuthSource":"GVXPR04MB9831.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"22 Oct 2025 08:22:52.6756\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"95/U7NnnjFG5NNyHdvBnMcN85QCuhH8DXnWPPI5NPlPu+ocNv+YhIdY8nWjdXz5hn69SOvnV0owqOgWrisQTfQ==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"VI1PR04MB7006","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]