From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_DBL_ABUSE_MALW, USER_AGENT_SANE_2 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45F41C32771 for ; Tue, 28 Jan 2020 02:24:20 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 12783214AF for ; Tue, 28 Jan 2020 02:24:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="au8d+SIj"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="tweU/fVX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 12783214AF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=9tTMuLxSWdjhMKrhJ9iX4cBGdonWlN5DLiAog0LUpj4=; b=au8d+SIj5e+UvQ vAQTX4TOLMmOGmo3wi1tUe81Giust5/hOFKakPN7BZwr4kCc6tPnHKenQex2Muwn17vCjwIdwYa8y gZjpeMpruH/cZJ7UrzGCcfTvKwHY32XHZmdd79qj6KR4P7T+sc9RWZb8UsPl6IlZ7W/7CNJylsIf7 1Ahtrk2+W6rIHBVAUlmaj1ATKsdDD1vkQwGvM727SXfhPfdjFhNGnVKu8Bc22vtDBekSkZVwSJk3N lxmad2ZHTEA/30zmqANk/fRG4mRPYLciujoyVz+nBAcQ22I+zmPOJyS5LF7xqJ/qTehNoL4rL2t++ 2V5iSIRNMp2wxlmmtoXw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iwGY0-0004Kw-5P; Tue, 28 Jan 2020 02:24:12 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iwGXo-0004C5-7m; Tue, 28 Jan 2020 02:24:02 +0000 X-UUID: 8d10e93ab4234aad89416d7a412427ef-20200127 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=p0nnIJ+ph00THpKCeQPEgq8IEXgYibuUyEVe40bgwLo=; b=tweU/fVXTQAo6VX3cUKRcrPqoH3joTikGDwRk6ERECb30fZcp85+4Jnoa0QemtlMTk6j9oO5O/hgle1Q0NtqxqNfOHXOraLzLzKF1+8lrie2+0hwPhPDyGIOIjOV5gG25lwxLLzSATpZJa7YbPSeYj9ILx7ZsNAT4+zs5Io+xd8=; X-UUID: 8d10e93ab4234aad89416d7a412427ef-20200127 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1567482917; Mon, 27 Jan 2020 18:23:51 -0800 Received: from MTKMBS06N1.mediatek.inc (172.21.101.129) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 27 Jan 2020 18:15:09 -0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs06n1.mediatek.inc (172.21.101.129) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 28 Jan 2020 10:13:47 +0800 Received: from [172.21.84.99] (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Tue, 28 Jan 2020 10:14:00 +0800 Message-ID: <1580177627.13350.8.camel@mtksdccf07> Subject: Re: [v6, 5/5] media: platform: Add Mediatek ISP P1 V4L2 device driver From: Jungo Lin To: Hans Verkuil Date: Tue, 28 Jan 2020 10:13:47 +0800 In-Reply-To: References: <20191219054930.29513-1-jungo.lin@mediatek.com> <20191219054930.29513-6-jungo.lin@mediatek.com> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200127_182400_299078_CA084A6C X-CRM114-Status: GOOD ( 23.09 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ryan.yu@mediatek.com, frankie.chiu@mediatek.com, laurent.pinchart@ideasonboard.com, robh@kernel.org, Rynn.Wu@mediatek.com, suleiman@chromium.org, Jerry-ch.Chen@mediatek.com, frederic.chen@mediatek.com, linux-media@vger.kernel.org, devicetree@vger.kernel.org, sj.huang@mediatek.com, yuzhao@chromium.org, linux-mediatek@lists.infradead.org, Pi-Hsun Shih , matthias.bgg@gmail.com, mchehab@kernel.org, linux-arm-kernel@lists.infradead.org, Sean.Cheng@mediatek.com, srv_heupstream@mediatek.com, shik@chromium.org, tfiga@chromium.org, zwisler@chromium.org, ddavenport@chromium.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Hi, Hans: On Thu, 2020-01-23 at 14:59 +0100, Hans Verkuil wrote: > Hi Jungo, > > On 12/19/19 6:49 AM, Jungo Lin wrote: > > This patch adds the Mediatek ISP P1 HW control device driver. > > It handles the ISP HW configuration, provides interrupt handling and > > initializes the V4L2 device nodes and other V4L2 functions. Moreover, > > implement standard V4L2 video driver that utilizes V4L2 and media > > framework APIs. It supports one media device, one sub-device and > > several video devices during initialization. Moreover, it also connects > > with sensor and seninf drivers with V4L2 async APIs. Communicate with > > co-process via SCP communication to compose ISP registers in the > > firmware. > > > > (The current metadata interface used in meta input and partial > > meta nodes is only a temporary solution to kick off the driver > > development and is not ready to be reviewed yet.) > > > > Signed-off-by: Jungo Lin > > Signed-off-by: Tomasz Figa > > Signed-off-by: Pi-Hsun Shih > > --- > > Changes from v6: > > - Revise help description for VIDEO_MEDIATEK_ISP_PASS1 > > - Apply SCP v21 change in P1 driver by Pi-Hsun Shih > > - Correct auto suspend timer value for suspend/resume issue > > - Increase IPI guard timer to 1 second to avoid false alarm command timeout event > > - Fix KE due to no sen-inf sub-device > > --- > > drivers/media/platform/mtk-isp/Kconfig | 20 + > > .../media/platform/mtk-isp/isp_50/Makefile | 3 + > > .../platform/mtk-isp/isp_50/cam/Makefile | 6 + > > .../platform/mtk-isp/isp_50/cam/mtk_cam-hw.c | 636 +++++ > > .../platform/mtk-isp/isp_50/cam/mtk_cam-hw.h | 64 + > > .../platform/mtk-isp/isp_50/cam/mtk_cam-ipi.h | 222 ++ > > .../mtk-isp/isp_50/cam/mtk_cam-regs.h | 95 + > > .../platform/mtk-isp/isp_50/cam/mtk_cam.c | 2087 +++++++++++++++++ > > .../platform/mtk-isp/isp_50/cam/mtk_cam.h | 244 ++ > > 9 files changed, 3377 insertions(+) > > create mode 100644 drivers/media/platform/mtk-isp/Kconfig > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/Makefile > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/Makefile > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-hw.c > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-hw.h > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-ipi.h > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-regs.h > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam.c > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam.h > > > > > +static void isp_tx_frame_worker(struct work_struct *work) > > +{ > > + struct mtk_cam_dev_request *req = > > + container_of(work, struct mtk_cam_dev_request, frame_work); > > + struct mtk_cam_dev *cam = > > + container_of(req->req.mdev, struct mtk_cam_dev, media_dev); > > + struct mtk_isp_p1_device *p1_dev = dev_get_drvdata(cam->dev); > > + > > + scp_ipi_send(p1_dev->scp, SCP_IPI_ISP_FRAME, &req->frame_params, > > + sizeof(req->frame_params), MTK_ISP_IPI_SEND_TIMEOUT); > > +} > > > > > +void mtk_isp_req_enqueue(struct mtk_cam_dev *cam, > > + struct mtk_cam_dev_request *req) > > +{ > > + struct mtk_isp_p1_device *p1_dev = dev_get_drvdata(cam->dev); > > + > > + /* Accumulated frame sequence number */ > > + req->frame_params.frame_seq_no = ++p1_dev->enqueued_frame_seq_no; > > + > > + INIT_WORK(&req->frame_work, isp_tx_frame_worker); > > + queue_work(p1_dev->composer_wq, &req->frame_work); > > + dev_dbg(cam->dev, "enqueue fd:%s frame_seq_no:%d job cnt:%d\n", > > + req->req.debug_str, req->frame_params.frame_seq_no, > > + cam->running_job_count); > > +} > > > > > +/* > > + * struct dma_buffer - DMA buffer address information > > + * > > + * @iova: DMA address for ISP DMA device > > + * @scp_addr: SCP address for external co-process unit > > + * > > + */ > > +struct dma_buffer { > > + u32 iova; > > + u32 scp_addr; > > +} __packed; > > > > > +static void mtk_cam_vb2_buf_queue(struct vb2_buffer *vb) > > +{ > > + struct mtk_cam_dev *cam = vb2_get_drv_priv(vb->vb2_queue); > > + struct mtk_cam_dev_buffer *buf = mtk_cam_vb2_buf_to_dev_buf(vb); > > + struct mtk_cam_dev_request *req = mtk_cam_req_to_dev_req(vb->request); > > + struct mtk_cam_video_device *node = mtk_cam_vbq_to_vdev(vb->vb2_queue); > > + struct device *dev = cam->dev; > > + unsigned long flags; > > + > > + dev_dbg(dev, "%s: node:%d fd:%d idx:%d\n", __func__, > > + node->id, buf->vbb.request_fd, buf->vbb.vb2_buf.index); > > + > > + /* added the buffer into the tracking list */ > > + spin_lock_irqsave(&node->buf_list_lock, flags); > > + list_add_tail(&buf->list, &node->buf_list); > > + spin_unlock_irqrestore(&node->buf_list_lock, flags); > > + > > + /* update buffer internal address */ > > + req->frame_params.dma_bufs[buf->node_id].iova = buf->daddr; > > + req->frame_params.dma_bufs[buf->node_id].scp_addr = buf->scp_addr; > > +} > > + > > > > > +/* > > + * struct mtk_p1_frame_param - MTK ISP P1 driver frame parameters. > > + * > > + * @frame_seq_no: The frame sequence of frame in driver layer. > > + * @dma_bufs: The DMA buffer address information of enabled DMA nodes. > > + * > > + */ > > +struct mtk_p1_frame_param { > > + unsigned int frame_seq_no; > > + struct dma_buffer dma_bufs[MTK_CAM_P1_TOTAL_NODES]; > > +} __packed; > > So if I understand this correctly, to set the ISP frame parameters userspace > provides an array of pointers to other memory areas that are magically created > somewhere and containing magic, undocumented data. > > I know you said that this is 'not ready to be reviewed yet', but I just wanted > to mention that this is of course not acceptable and needs to be replaced with > a documented metadata structure that userspace can pass in the metadata buffer. > > Just ignore this email if you were already planning on doing that. I just wanted > to make sure that it is clear that the current approach won't fly. > > Regards, > > Hans > Thanks for your comment. Firstly, I think I miss meta data types definition in this series. https://patchwork.kernel.org/patch/11126055/ include/uapi/linux/videodev2.h +#define V4L2_META_FMT_MTISP_3A v4l2_fourcc('M', 'T', 'f', 'a') /* AE/AWB histogram */ +#define V4L2_META_FMT_MTISP_AF v4l2_fourcc('M', 'T', 'f', 'f') /* AF histogram */ +#define V4L2_META_FMT_MTISP_LCS v4l2_fourcc('M', 'T', 'f', 'c') /* Local contrast enhanced statistics */ +#define V4L2_META_FMT_MTISP_LMV v4l2_fourcc('M', 'T', 'f', 'm') /* Local motion vector histogram */ +#define V4L2_META_FMT_MTISP_PARAMS v4l2_fourcc('M', 'T', 'f', 'p') /* ISP tuning parameters */ We will correct this missing error in next patch set. Secondly, we are working on the documented meta-data structures for these meta nodes, especially on 4L2_META_FMT_MTISP_PARAMS which is used for tuning parameters from user space. Sincerely Jungo > _______________________________________________ > Linux-mediatek mailing list > Linux-mediatek@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-mediatek _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_DBL_ABUSE_MALW, USER_AGENT_SANE_2 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DAF80C32771 for ; Tue, 28 Jan 2020 02:24:11 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A9FF4214AF for ; Tue, 28 Jan 2020 02:24:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="dPS7x4If"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="tweU/fVX" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A9FF4214AF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ivCtLt9A/E1J4DS+G0/4MBwL5MUWBNKutxPpBAdAeZQ=; b=dPS7x4IfZQaoaa 69nYIPj+e7qnn1rv+xssNyAqU/dRuZRhxLTo009txyGum3QW22p99uhCPR8xBV87DZJ8wEtbr12IN eWojgTXpbYocMayjg4JUA8FFV48RMz6kQkYuuvNQr37BawGSmDQK+WLfCowOSY5fXuo9xQP+Tv17P I86t0eHh07vYFbAtL6AIaI0SUSXSn+VBy2lGCyuH3BUfGH1xo0q9TdKADElHft79e9hLhr9pvtyrb KNPUV8jGKywkXD6D+w/YPFYjvvpPYdpP1eUve/Vhq4yu0GEAJPObezb6/BWjg32mihLL44AMUYsGd nR4kuqY08ShoabPzw9cw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iwGXs-0004Ci-Nh; Tue, 28 Jan 2020 02:24:04 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iwGXo-0004C5-7m; Tue, 28 Jan 2020 02:24:02 +0000 X-UUID: 8d10e93ab4234aad89416d7a412427ef-20200127 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=p0nnIJ+ph00THpKCeQPEgq8IEXgYibuUyEVe40bgwLo=; b=tweU/fVXTQAo6VX3cUKRcrPqoH3joTikGDwRk6ERECb30fZcp85+4Jnoa0QemtlMTk6j9oO5O/hgle1Q0NtqxqNfOHXOraLzLzKF1+8lrie2+0hwPhPDyGIOIjOV5gG25lwxLLzSATpZJa7YbPSeYj9ILx7ZsNAT4+zs5Io+xd8=; X-UUID: 8d10e93ab4234aad89416d7a412427ef-20200127 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1567482917; Mon, 27 Jan 2020 18:23:51 -0800 Received: from MTKMBS06N1.mediatek.inc (172.21.101.129) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 27 Jan 2020 18:15:09 -0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs06n1.mediatek.inc (172.21.101.129) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 28 Jan 2020 10:13:47 +0800 Received: from [172.21.84.99] (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Tue, 28 Jan 2020 10:14:00 +0800 Message-ID: <1580177627.13350.8.camel@mtksdccf07> Subject: Re: [v6, 5/5] media: platform: Add Mediatek ISP P1 V4L2 device driver From: Jungo Lin To: Hans Verkuil Date: Tue, 28 Jan 2020 10:13:47 +0800 In-Reply-To: References: <20191219054930.29513-1-jungo.lin@mediatek.com> <20191219054930.29513-6-jungo.lin@mediatek.com> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200127_182400_299078_CA084A6C X-CRM114-Status: GOOD ( 23.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ryan.yu@mediatek.com, frankie.chiu@mediatek.com, laurent.pinchart@ideasonboard.com, robh@kernel.org, Rynn.Wu@mediatek.com, suleiman@chromium.org, Jerry-ch.Chen@mediatek.com, frederic.chen@mediatek.com, linux-media@vger.kernel.org, devicetree@vger.kernel.org, sj.huang@mediatek.com, yuzhao@chromium.org, linux-mediatek@lists.infradead.org, Pi-Hsun Shih , matthias.bgg@gmail.com, mchehab@kernel.org, linux-arm-kernel@lists.infradead.org, Sean.Cheng@mediatek.com, srv_heupstream@mediatek.com, shik@chromium.org, tfiga@chromium.org, zwisler@chromium.org, ddavenport@chromium.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, Hans: On Thu, 2020-01-23 at 14:59 +0100, Hans Verkuil wrote: > Hi Jungo, > > On 12/19/19 6:49 AM, Jungo Lin wrote: > > This patch adds the Mediatek ISP P1 HW control device driver. > > It handles the ISP HW configuration, provides interrupt handling and > > initializes the V4L2 device nodes and other V4L2 functions. Moreover, > > implement standard V4L2 video driver that utilizes V4L2 and media > > framework APIs. It supports one media device, one sub-device and > > several video devices during initialization. Moreover, it also connects > > with sensor and seninf drivers with V4L2 async APIs. Communicate with > > co-process via SCP communication to compose ISP registers in the > > firmware. > > > > (The current metadata interface used in meta input and partial > > meta nodes is only a temporary solution to kick off the driver > > development and is not ready to be reviewed yet.) > > > > Signed-off-by: Jungo Lin > > Signed-off-by: Tomasz Figa > > Signed-off-by: Pi-Hsun Shih > > --- > > Changes from v6: > > - Revise help description for VIDEO_MEDIATEK_ISP_PASS1 > > - Apply SCP v21 change in P1 driver by Pi-Hsun Shih > > - Correct auto suspend timer value for suspend/resume issue > > - Increase IPI guard timer to 1 second to avoid false alarm command timeout event > > - Fix KE due to no sen-inf sub-device > > --- > > drivers/media/platform/mtk-isp/Kconfig | 20 + > > .../media/platform/mtk-isp/isp_50/Makefile | 3 + > > .../platform/mtk-isp/isp_50/cam/Makefile | 6 + > > .../platform/mtk-isp/isp_50/cam/mtk_cam-hw.c | 636 +++++ > > .../platform/mtk-isp/isp_50/cam/mtk_cam-hw.h | 64 + > > .../platform/mtk-isp/isp_50/cam/mtk_cam-ipi.h | 222 ++ > > .../mtk-isp/isp_50/cam/mtk_cam-regs.h | 95 + > > .../platform/mtk-isp/isp_50/cam/mtk_cam.c | 2087 +++++++++++++++++ > > .../platform/mtk-isp/isp_50/cam/mtk_cam.h | 244 ++ > > 9 files changed, 3377 insertions(+) > > create mode 100644 drivers/media/platform/mtk-isp/Kconfig > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/Makefile > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/Makefile > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-hw.c > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-hw.h > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-ipi.h > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam-regs.h > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam.c > > create mode 100644 drivers/media/platform/mtk-isp/isp_50/cam/mtk_cam.h > > > > > +static void isp_tx_frame_worker(struct work_struct *work) > > +{ > > + struct mtk_cam_dev_request *req = > > + container_of(work, struct mtk_cam_dev_request, frame_work); > > + struct mtk_cam_dev *cam = > > + container_of(req->req.mdev, struct mtk_cam_dev, media_dev); > > + struct mtk_isp_p1_device *p1_dev = dev_get_drvdata(cam->dev); > > + > > + scp_ipi_send(p1_dev->scp, SCP_IPI_ISP_FRAME, &req->frame_params, > > + sizeof(req->frame_params), MTK_ISP_IPI_SEND_TIMEOUT); > > +} > > > > > +void mtk_isp_req_enqueue(struct mtk_cam_dev *cam, > > + struct mtk_cam_dev_request *req) > > +{ > > + struct mtk_isp_p1_device *p1_dev = dev_get_drvdata(cam->dev); > > + > > + /* Accumulated frame sequence number */ > > + req->frame_params.frame_seq_no = ++p1_dev->enqueued_frame_seq_no; > > + > > + INIT_WORK(&req->frame_work, isp_tx_frame_worker); > > + queue_work(p1_dev->composer_wq, &req->frame_work); > > + dev_dbg(cam->dev, "enqueue fd:%s frame_seq_no:%d job cnt:%d\n", > > + req->req.debug_str, req->frame_params.frame_seq_no, > > + cam->running_job_count); > > +} > > > > > +/* > > + * struct dma_buffer - DMA buffer address information > > + * > > + * @iova: DMA address for ISP DMA device > > + * @scp_addr: SCP address for external co-process unit > > + * > > + */ > > +struct dma_buffer { > > + u32 iova; > > + u32 scp_addr; > > +} __packed; > > > > > +static void mtk_cam_vb2_buf_queue(struct vb2_buffer *vb) > > +{ > > + struct mtk_cam_dev *cam = vb2_get_drv_priv(vb->vb2_queue); > > + struct mtk_cam_dev_buffer *buf = mtk_cam_vb2_buf_to_dev_buf(vb); > > + struct mtk_cam_dev_request *req = mtk_cam_req_to_dev_req(vb->request); > > + struct mtk_cam_video_device *node = mtk_cam_vbq_to_vdev(vb->vb2_queue); > > + struct device *dev = cam->dev; > > + unsigned long flags; > > + > > + dev_dbg(dev, "%s: node:%d fd:%d idx:%d\n", __func__, > > + node->id, buf->vbb.request_fd, buf->vbb.vb2_buf.index); > > + > > + /* added the buffer into the tracking list */ > > + spin_lock_irqsave(&node->buf_list_lock, flags); > > + list_add_tail(&buf->list, &node->buf_list); > > + spin_unlock_irqrestore(&node->buf_list_lock, flags); > > + > > + /* update buffer internal address */ > > + req->frame_params.dma_bufs[buf->node_id].iova = buf->daddr; > > + req->frame_params.dma_bufs[buf->node_id].scp_addr = buf->scp_addr; > > +} > > + > > > > > +/* > > + * struct mtk_p1_frame_param - MTK ISP P1 driver frame parameters. > > + * > > + * @frame_seq_no: The frame sequence of frame in driver layer. > > + * @dma_bufs: The DMA buffer address information of enabled DMA nodes. > > + * > > + */ > > +struct mtk_p1_frame_param { > > + unsigned int frame_seq_no; > > + struct dma_buffer dma_bufs[MTK_CAM_P1_TOTAL_NODES]; > > +} __packed; > > So if I understand this correctly, to set the ISP frame parameters userspace > provides an array of pointers to other memory areas that are magically created > somewhere and containing magic, undocumented data. > > I know you said that this is 'not ready to be reviewed yet', but I just wanted > to mention that this is of course not acceptable and needs to be replaced with > a documented metadata structure that userspace can pass in the metadata buffer. > > Just ignore this email if you were already planning on doing that. I just wanted > to make sure that it is clear that the current approach won't fly. > > Regards, > > Hans > Thanks for your comment. Firstly, I think I miss meta data types definition in this series. https://patchwork.kernel.org/patch/11126055/ include/uapi/linux/videodev2.h +#define V4L2_META_FMT_MTISP_3A v4l2_fourcc('M', 'T', 'f', 'a') /* AE/AWB histogram */ +#define V4L2_META_FMT_MTISP_AF v4l2_fourcc('M', 'T', 'f', 'f') /* AF histogram */ +#define V4L2_META_FMT_MTISP_LCS v4l2_fourcc('M', 'T', 'f', 'c') /* Local contrast enhanced statistics */ +#define V4L2_META_FMT_MTISP_LMV v4l2_fourcc('M', 'T', 'f', 'm') /* Local motion vector histogram */ +#define V4L2_META_FMT_MTISP_PARAMS v4l2_fourcc('M', 'T', 'f', 'p') /* ISP tuning parameters */ We will correct this missing error in next patch set. Secondly, we are working on the documented meta-data structures for these meta nodes, especially on 4L2_META_FMT_MTISP_PARAMS which is used for tuning parameters from user space. Sincerely Jungo > _______________________________________________ > Linux-mediatek mailing list > Linux-mediatek@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-mediatek _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_DBL_ABUSE_MALW, USER_AGENT_SANE_2 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 339C0C32771 for ; Tue, 28 Jan 2020 02:13:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DAAC92173E for ; Tue, 28 Jan 2020 02:13:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="tweU/fVX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726191AbgA1CN4 (ORCPT ); Mon, 27 Jan 2020 21:13:56 -0500 Received: from mailgw01.mediatek.com ([210.61.82.183]:6456 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726099AbgA1CN4 (ORCPT ); Mon, 27 Jan 2020 21:13:56 -0500 X-UUID: fbe9bf7276814657b47eecd443d0e5ae-20200128 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=p0nnIJ+ph00THpKCeQPEgq8IEXgYibuUyEVe40bgwLo=; b=tweU/fVXTQAo6VX3cUKRcrPqoH3joTikGDwRk6ERECb30fZcp85+4Jnoa0QemtlMTk6j9oO5O/hgle1Q0NtqxqNfOHXOraLzLzKF1+8lrie2+0hwPhPDyGIOIjOV5gG25lwxLLzSATpZJa7YbPSeYj9ILx7ZsNAT4+zs5Io+xd8=; X-UUID: fbe9bf7276814657b47eecd443d0e5ae-20200128 Received: from mtkexhb02.mediatek.inc [(172.21.101.103)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 98680820; Tue, 28 Jan 2020 10:13:49 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs06n1.mediatek.inc (172.21.101.129) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Tue, 28 Jan 2020 10:13:47 +0800 Received: from [172.21.84.99] (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Tue, 28 Jan 2020 10:14:00 +0800 Message-ID: <1580177627.13350.8.camel@mtksdccf07> Subject: Re: [v6, 5/5] media: platform: Add Mediatek ISP P1 V4L2 device driver From: Jungo Lin To: Hans Verkuil CC: , , , , , , , , , Pi-Hsun Shih , , , , , , , , , , , , , Date: Tue, 28 Jan 2020 10:13:47 +0800 In-Reply-To: References: <20191219054930.29513-1-jungo.lin@mediatek.com> <20191219054930.29513-6-jungo.lin@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org SGksIEhhbnM6DQoNCk9uIFRodSwgMjAyMC0wMS0yMyBhdCAxNDo1OSArMDEwMCwgSGFucyBWZXJr dWlsIHdyb3RlOg0KPiBIaSBKdW5nbywNCj4gDQo+IE9uIDEyLzE5LzE5IDY6NDkgQU0sIEp1bmdv IExpbiB3cm90ZToNCj4gPiBUaGlzIHBhdGNoIGFkZHMgdGhlIE1lZGlhdGVrIElTUCBQMSBIVyBj b250cm9sIGRldmljZSBkcml2ZXIuDQo+ID4gSXQgaGFuZGxlcyB0aGUgSVNQIEhXIGNvbmZpZ3Vy YXRpb24sIHByb3ZpZGVzIGludGVycnVwdCBoYW5kbGluZyBhbmQNCj4gPiBpbml0aWFsaXplcyB0 aGUgVjRMMiBkZXZpY2Ugbm9kZXMgYW5kIG90aGVyIFY0TDIgZnVuY3Rpb25zLiBNb3Jlb3ZlciwN Cj4gPiBpbXBsZW1lbnQgc3RhbmRhcmQgVjRMMiB2aWRlbyBkcml2ZXIgdGhhdCB1dGlsaXplcyBW NEwyIGFuZCBtZWRpYQ0KPiA+IGZyYW1ld29yayBBUElzLiBJdCBzdXBwb3J0cyBvbmUgbWVkaWEg ZGV2aWNlLCBvbmUgc3ViLWRldmljZSBhbmQNCj4gPiBzZXZlcmFsIHZpZGVvIGRldmljZXMgZHVy aW5nIGluaXRpYWxpemF0aW9uLiBNb3Jlb3ZlciwgaXQgYWxzbyBjb25uZWN0cw0KPiA+IHdpdGgg c2Vuc29yIGFuZCBzZW5pbmYgZHJpdmVycyB3aXRoIFY0TDIgYXN5bmMgQVBJcy4gQ29tbXVuaWNh dGUgd2l0aA0KPiA+IGNvLXByb2Nlc3MgdmlhIFNDUCBjb21tdW5pY2F0aW9uIHRvIGNvbXBvc2Ug SVNQIHJlZ2lzdGVycyBpbiB0aGUNCj4gPiBmaXJtd2FyZS4NCj4gPiANCj4gPiAoVGhlIGN1cnJl bnQgbWV0YWRhdGEgaW50ZXJmYWNlIHVzZWQgaW4gbWV0YSBpbnB1dCBhbmQgcGFydGlhbA0KPiA+ IG1ldGEgbm9kZXMgaXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiB0byBraWNrIG9mZiB0aGUg ZHJpdmVyDQo+ID4gZGV2ZWxvcG1lbnQgYW5kIGlzIG5vdCByZWFkeSB0byBiZSByZXZpZXdlZCB5 ZXQuKQ0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IEp1bmdvIExpbiA8anVuZ28ubGluQG1lZGlh dGVrLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0u b3JnPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFBpLUhzdW4gU2hpaCA8cGloc3VuQGNocm9taXVtLm9y Zz4NCj4gPiAtLS0NCj4gPiBDaGFuZ2VzIGZyb20gdjY6DQo+ID4gIC0gUmV2aXNlIGhlbHAgZGVz Y3JpcHRpb24gZm9yIFZJREVPX01FRElBVEVLX0lTUF9QQVNTMQ0KPiA+ICAtIEFwcGx5IFNDUCB2 MjEgY2hhbmdlIGluIFAxIGRyaXZlciBieSBQaS1Ic3VuIFNoaWgNCj4gPiAgLSBDb3JyZWN0IGF1 dG8gc3VzcGVuZCB0aW1lciB2YWx1ZSBmb3Igc3VzcGVuZC9yZXN1bWUgaXNzdWUNCj4gPiAgLSBJ bmNyZWFzZSBJUEkgZ3VhcmQgdGltZXIgdG8gMSBzZWNvbmQgdG8gYXZvaWQgZmFsc2UgYWxhcm0g Y29tbWFuZCB0aW1lb3V0IGV2ZW50DQo+ID4gIC0gRml4IEtFIGR1ZSB0byBubyBzZW4taW5mIHN1 Yi1kZXZpY2UNCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL0tj b25maWcgICAgICAgIHwgICAyMCArDQo+ID4gIC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lz cF81MC9NYWtlZmlsZSAgICB8ICAgIDMgKw0KPiA+ICAuLi4vcGxhdGZvcm0vbXRrLWlzcC9pc3Bf NTAvY2FtL01ha2VmaWxlICAgICAgfCAgICA2ICsNCj4gPiAgLi4uL3BsYXRmb3JtL210ay1pc3Av aXNwXzUwL2NhbS9tdGtfY2FtLWh3LmMgIHwgIDYzNiArKysrKw0KPiA+ICAuLi4vcGxhdGZvcm0v bXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0taHcuaCAgfCAgIDY0ICsNCj4gPiAgLi4uL3BsYXRm b3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLWlwaS5oIHwgIDIyMiArKw0KPiA+ICAuLi4v bXRrLWlzcC9pc3BfNTAvY2FtL210a19jYW0tcmVncy5oICAgICAgICAgfCAgIDk1ICsNCj4gPiAg Li4uL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLmMgICAgIHwgMjA4NyArKysr KysrKysrKysrKysrKw0KPiA+ICAuLi4vcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2FtL210a19j YW0uaCAgICAgfCAgMjQ0ICsrDQo+ID4gIDkgZmlsZXMgY2hhbmdlZCwgMzM3NyBpbnNlcnRpb25z KCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1p c3AvS2NvbmZpZw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9tdGstaXNwL2lzcF81MC9NYWtlZmlsZQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vTWFrZWZpbGUNCj4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLWlzcC9pc3BfNTAvY2FtL210 a19jYW0taHcuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9tdGstaXNwL2lzcF81MC9jYW0vbXRrX2NhbS1ody5oDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9tdGtfY2FtLWlwaS5o DQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3Av aXNwXzUwL2NhbS9tdGtfY2FtLXJlZ3MuaA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9tdGstaXNwL2lzcF81MC9jYW0vbXRrX2NhbS5jDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay1pc3AvaXNwXzUwL2NhbS9t dGtfY2FtLmgNCj4gDQo+IDxzbmlwPg0KPiANCj4gPiArc3RhdGljIHZvaWQgaXNwX3R4X2ZyYW1l X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBt dGtfY2FtX2Rldl9yZXF1ZXN0ICpyZXEgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgbXRrX2NhbV9kZXZfcmVxdWVzdCwgZnJhbWVfd29yayk7DQo+ID4gKwlzdHJ1Y3QgbXRrX2Nh bV9kZXYgKmNhbSA9DQo+ID4gKwkJY29udGFpbmVyX29mKHJlcS0+cmVxLm1kZXYsIHN0cnVjdCBt dGtfY2FtX2RldiwgbWVkaWFfZGV2KTsNCj4gPiArCXN0cnVjdCBtdGtfaXNwX3AxX2RldmljZSAq cDFfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGNhbS0+ZGV2KTsNCj4gPiArDQo+ID4gKwlzY3BfaXBp X3NlbmQocDFfZGV2LT5zY3AsIFNDUF9JUElfSVNQX0ZSQU1FLCAmcmVxLT5mcmFtZV9wYXJhbXMs DQo+ID4gKwkJICAgICBzaXplb2YocmVxLT5mcmFtZV9wYXJhbXMpLCBNVEtfSVNQX0lQSV9TRU5E X1RJTUVPVVQpOw0KPiA+ICt9DQo+IA0KPiA8c25pcD4NCj4gDQo+ID4gK3ZvaWQgbXRrX2lzcF9y ZXFfZW5xdWV1ZShzdHJ1Y3QgbXRrX2NhbV9kZXYgKmNhbSwNCj4gPiArCQkJIHN0cnVjdCBtdGtf Y2FtX2Rldl9yZXF1ZXN0ICpyZXEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfaXNwX3AxX2Rl dmljZSAqcDFfZGV2ID0gZGV2X2dldF9kcnZkYXRhKGNhbS0+ZGV2KTsNCj4gPiArDQo+ID4gKwkv KiBBY2N1bXVsYXRlZCBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgKi8NCj4gPiArCXJlcS0+ZnJhbWVf cGFyYW1zLmZyYW1lX3NlcV9ubyA9ICsrcDFfZGV2LT5lbnF1ZXVlZF9mcmFtZV9zZXFfbm87DQo+ ID4gKw0KPiA+ICsJSU5JVF9XT1JLKCZyZXEtPmZyYW1lX3dvcmssIGlzcF90eF9mcmFtZV93b3Jr ZXIpOw0KPiA+ICsJcXVldWVfd29yayhwMV9kZXYtPmNvbXBvc2VyX3dxLCAmcmVxLT5mcmFtZV93 b3JrKTsNCj4gPiArCWRldl9kYmcoY2FtLT5kZXYsICJlbnF1ZXVlIGZkOiVzIGZyYW1lX3NlcV9u bzolZCBqb2IgY250OiVkXG4iLA0KPiA+ICsJCXJlcS0+cmVxLmRlYnVnX3N0ciwgcmVxLT5mcmFt ZV9wYXJhbXMuZnJhbWVfc2VxX25vLA0KPiA+ICsJCWNhbS0+cnVubmluZ19qb2JfY291bnQpOw0K PiA+ICt9DQo+IA0KPiA8c25pcD4NCj4gDQo+ID4gKy8qDQo+ID4gKyAqIHN0cnVjdCBkbWFfYnVm ZmVyIC0gRE1BIGJ1ZmZlciBhZGRyZXNzIGluZm9ybWF0aW9uDQo+ID4gKyAqDQo+ID4gKyAqIEBp b3ZhOiBETUEgYWRkcmVzcyBmb3IgSVNQIERNQSBkZXZpY2UNCj4gPiArICogQHNjcF9hZGRyOiBT Q1AgYWRkcmVzcyBmb3IgZXh0ZXJuYWwgY28tcHJvY2VzcyB1bml0DQo+ID4gKyAqDQo+ID4gKyAq Lw0KPiA+ICtzdHJ1Y3QgZG1hX2J1ZmZlciB7DQo+ID4gKwl1MzIgaW92YTsNCj4gPiArCXUzMiBz Y3BfYWRkcjsNCj4gPiArfSBfX3BhY2tlZDsNCj4gDQo+IDxzbmlwPg0KPiANCj4gPiArc3RhdGlj IHZvaWQgbXRrX2NhbV92YjJfYnVmX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCj4gPiAr ew0KPiA+ICsJc3RydWN0IG10a19jYW1fZGV2ICpjYW0gPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52 YjJfcXVldWUpOw0KPiA+ICsJc3RydWN0IG10a19jYW1fZGV2X2J1ZmZlciAqYnVmID0gbXRrX2Nh bV92YjJfYnVmX3RvX2Rldl9idWYodmIpOw0KPiA+ICsJc3RydWN0IG10a19jYW1fZGV2X3JlcXVl c3QgKnJlcSA9IG10a19jYW1fcmVxX3RvX2Rldl9yZXEodmItPnJlcXVlc3QpOw0KPiA+ICsJc3Ry dWN0IG10a19jYW1fdmlkZW9fZGV2aWNlICpub2RlID0gbXRrX2NhbV92YnFfdG9fdmRldih2Yi0+ dmIyX3F1ZXVlKTsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNhbS0+ZGV2Ow0KPiA+ICsJ dW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKGRldiwgIiVzOiBub2Rl OiVkIGZkOiVkIGlkeDolZFxuIiwgX19mdW5jX18sDQo+ID4gKwkJbm9kZS0+aWQsIGJ1Zi0+dmJi LnJlcXVlc3RfZmQsIGJ1Zi0+dmJiLnZiMl9idWYuaW5kZXgpOw0KPiA+ICsNCj4gPiArCS8qIGFk ZGVkIHRoZSBidWZmZXIgaW50byB0aGUgdHJhY2tpbmcgbGlzdCAqLw0KPiA+ICsJc3Bpbl9sb2Nr X2lycXNhdmUoJm5vZGUtPmJ1Zl9saXN0X2xvY2ssIGZsYWdzKTsNCj4gPiArCWxpc3RfYWRkX3Rh aWwoJmJ1Zi0+bGlzdCwgJm5vZGUtPmJ1Zl9saXN0KTsNCj4gPiArCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJm5vZGUtPmJ1Zl9saXN0X2xvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKwkvKiB1cGRh dGUgYnVmZmVyIGludGVybmFsIGFkZHJlc3MgKi8NCj4gPiArCXJlcS0+ZnJhbWVfcGFyYW1zLmRt YV9idWZzW2J1Zi0+bm9kZV9pZF0uaW92YSA9IGJ1Zi0+ZGFkZHI7DQo+ID4gKwlyZXEtPmZyYW1l X3BhcmFtcy5kbWFfYnVmc1tidWYtPm5vZGVfaWRdLnNjcF9hZGRyID0gYnVmLT5zY3BfYWRkcjsN Cj4gPiArfQ0KPiA+ICsNCj4gDQo+IDxzbmlwPg0KPiANCj4gPiArLyoNCj4gPiArICogc3RydWN0 IG10a19wMV9mcmFtZV9wYXJhbSAtIE1USyBJU1AgUDEgZHJpdmVyIGZyYW1lIHBhcmFtZXRlcnMu DQo+ID4gKyAqDQo+ID4gKyAqIEBmcmFtZV9zZXFfbm86IFRoZSBmcmFtZSBzZXF1ZW5jZSBvZiBm cmFtZSBpbiBkcml2ZXIgbGF5ZXIuDQo+ID4gKyAqIEBkbWFfYnVmczogVGhlIERNQSBidWZmZXIg YWRkcmVzcyBpbmZvcm1hdGlvbiBvZiBlbmFibGVkIERNQSBub2Rlcy4NCj4gPiArICoNCj4gPiAr ICovDQo+ID4gK3N0cnVjdCBtdGtfcDFfZnJhbWVfcGFyYW0gew0KPiA+ICsJdW5zaWduZWQgaW50 IGZyYW1lX3NlcV9ubzsNCj4gPiArCXN0cnVjdCBkbWFfYnVmZmVyIGRtYV9idWZzW01US19DQU1f UDFfVE9UQUxfTk9ERVNdOw0KPiA+ICt9IF9fcGFja2VkOw0KPiANCj4gU28gaWYgSSB1bmRlcnN0 YW5kIHRoaXMgY29ycmVjdGx5LCB0byBzZXQgdGhlIElTUCBmcmFtZSBwYXJhbWV0ZXJzIHVzZXJz cGFjZQ0KPiBwcm92aWRlcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBvdGhlciBtZW1vcnkgYXJl YXMgdGhhdCBhcmUgbWFnaWNhbGx5IGNyZWF0ZWQNCj4gc29tZXdoZXJlIGFuZCBjb250YWluaW5n IG1hZ2ljLCB1bmRvY3VtZW50ZWQgZGF0YS4NCj4gDQo+IEkga25vdyB5b3Ugc2FpZCB0aGF0IHRo aXMgaXMgJ25vdCByZWFkeSB0byBiZSByZXZpZXdlZCB5ZXQnLCBidXQgSSBqdXN0IHdhbnRlZA0K PiB0byBtZW50aW9uIHRoYXQgdGhpcyBpcyBvZiBjb3Vyc2Ugbm90IGFjY2VwdGFibGUgYW5kIG5l ZWRzIHRvIGJlIHJlcGxhY2VkIHdpdGgNCj4gYSBkb2N1bWVudGVkIG1ldGFkYXRhIHN0cnVjdHVy ZSB0aGF0IHVzZXJzcGFjZSBjYW4gcGFzcyBpbiB0aGUgbWV0YWRhdGEgYnVmZmVyLg0KPiANCj4g SnVzdCBpZ25vcmUgdGhpcyBlbWFpbCBpZiB5b3Ugd2VyZSBhbHJlYWR5IHBsYW5uaW5nIG9uIGRv aW5nIHRoYXQuIEkganVzdCB3YW50ZWQNCj4gdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgY2xlYXIg dGhhdCB0aGUgY3VycmVudCBhcHByb2FjaCB3b24ndCBmbHkuDQo+IA0KPiBSZWdhcmRzLA0KPiAN Cj4gCUhhbnMNCj4gDQoNClRoYW5rcyBmb3IgeW91ciBjb21tZW50Lg0KDQpGaXJzdGx5LCBJIHRo aW5rIEkgbWlzcyBtZXRhIGRhdGEgdHlwZXMgZGVmaW5pdGlvbiBpbiB0aGlzIHNlcmllcy4NCmh0 dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvMTExMjYwNTUvDQppbmNsdWRlL3VhcGkv bGludXgvdmlkZW9kZXYyLmgNCisjZGVmaW5lIFY0TDJfTUVUQV9GTVRfTVRJU1BfM0EgICAgdjRs Ml9mb3VyY2MoJ00nLCAnVCcsICdmJywgJ2EnKSAvKg0KQUUvQVdCIGhpc3RvZ3JhbSAqLw0KKyNk ZWZpbmUgVjRMMl9NRVRBX0ZNVF9NVElTUF9BRiAgICB2NGwyX2ZvdXJjYygnTScsICdUJywgJ2Yn LCAnZicpIC8qIEFGDQpoaXN0b2dyYW0gKi8NCisjZGVmaW5lIFY0TDJfTUVUQV9GTVRfTVRJU1Bf TENTICAgdjRsMl9mb3VyY2MoJ00nLCAnVCcsICdmJywgJ2MnKSAvKg0KTG9jYWwgY29udHJhc3Qg ZW5oYW5jZWQgc3RhdGlzdGljcyAqLw0KKyNkZWZpbmUgVjRMMl9NRVRBX0ZNVF9NVElTUF9MTVYg ICB2NGwyX2ZvdXJjYygnTScsICdUJywgJ2YnLCAnbScpIC8qDQpMb2NhbCBtb3Rpb24gdmVjdG9y IGhpc3RvZ3JhbSAqLw0KKyNkZWZpbmUgVjRMMl9NRVRBX0ZNVF9NVElTUF9QQVJBTVMgdjRsMl9m b3VyY2MoJ00nLCAnVCcsICdmJywgJ3AnKSAvKg0KSVNQIHR1bmluZyBwYXJhbWV0ZXJzICovDQpX ZSB3aWxsIGNvcnJlY3QgdGhpcyBtaXNzaW5nIGVycm9yIGluIG5leHQgcGF0Y2ggc2V0Lg0KDQpT ZWNvbmRseSwgd2UgYXJlIHdvcmtpbmcgb24gdGhlIGRvY3VtZW50ZWQgbWV0YS1kYXRhIHN0cnVj dHVyZXMgZm9yDQp0aGVzZSBtZXRhIG5vZGVzLCBlc3BlY2lhbGx5IG9uIDRMMl9NRVRBX0ZNVF9N VElTUF9QQVJBTVMgd2hpY2ggaXMgdXNlZA0KZm9yIHR1bmluZyBwYXJhbWV0ZXJzICBmcm9tIHVz ZXIgc3BhY2UuDQoNClNpbmNlcmVseQ0KDQpKdW5nbw0KDQo+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IExpbnV4LW1lZGlhdGVrIG1haWxpbmcgbGlz dA0KPiBMaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnDQo+IGh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbWVkaWF0ZWsNCg0K