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=-8.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=unavailable 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 E6B0EC433E0 for ; Wed, 10 Jun 2020 08:03:38 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 BC947206C3 for ; Wed, 10 Jun 2020 08:03:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="uaHJqiH0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BC947206C3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 3A6F687F3E; Wed, 10 Jun 2020 08:03:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5XYoa0R0DXIB; Wed, 10 Jun 2020 08:03:33 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by whitealder.osuosl.org (Postfix) with ESMTP id 6AE73875F0; Wed, 10 Jun 2020 08:03:33 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 346BAC088C; Wed, 10 Jun 2020 08:03:33 +0000 (UTC) Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id E8B00C016F for ; Wed, 10 Jun 2020 06:13:28 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id D1B9887894 for ; Wed, 10 Jun 2020 06:13:28 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id y85zvTz2hOAN for ; Wed, 10 Jun 2020 06:13:27 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by whitealder.osuosl.org (Postfix) with ESMTP id 5D8B987C94 for ; Wed, 10 Jun 2020 06:13:26 +0000 (UTC) X-UUID: 51daa1dbcc2c44cb9863eafb0f8e3573-20200610 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=7g39zsjgFbQQQ8ejglrHczGR1a++BpoBzudTSZ8Hps4=; b=uaHJqiH0tLmK/1yN2zNK7KDktu8iP5abxoyUwAHK693KNuJe86clJVd6IqPsHTAUmJUQ1FeInPNlxtyZH4qBVX/e8EaYqsRitNmGqmC0SZ6n/TWqF6Tykq59QwCJ4lNJehG/cDHgKLloy30JMfRSUco3VYJFgUq8aEJKi2sTx6I=; X-UUID: 51daa1dbcc2c44cb9863eafb0f8e3573-20200610 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1217306719; Wed, 10 Jun 2020 14:13:24 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 10 Jun 2020 14:13:21 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 10 Jun 2020 14:13:21 +0800 Message-ID: <1591769602.5047.3.camel@mtksdaap41> Subject: Re: [PATCH v4 08/17] media: mtk-vcodec: separate mtk-vcodec-enc node. From: Tiffany Lin To: CK Hu Date: Wed, 10 Jun 2020 14:13:22 +0800 In-Reply-To: <1591767911.527.5.camel@mtksdaap41> References: <1590826218-23653-1-git-send-email-yong.wu@mediatek.com> <1590826218-23653-9-git-send-email-yong.wu@mediatek.com> <1591767911.527.5.camel@mtksdaap41> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 22ADA025ED1332B9CD66379BF85F4C85BC2E639A6CED8FB4692F0EBDB9041AB62000:8 X-MTK: N X-Mailman-Approved-At: Wed, 10 Jun 2020 08:03:31 +0000 Cc: Maoguang Meng , Will Deacon , youlin.pei@mediatek.com, Irui Wang , Nicolas Boichat , Evan Green , eizan@chromium.org, Matthias Kaehlcke , devicetree@vger.kernel.org, cui.zhang@mediatek.com, Tomasz Figa , Rob Herring , linux-mediatek@lists.infradead.org, Hsin-Yi Wang , Matthias Brugger , ming-fan.chen@mediatek.com, linux-arm-kernel@lists.infradead.org, anan.sun@mediatek.com, acourbot@chromium.org, srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, chao.hao@mediatek.com, iommu@lists.linux-foundation.org, Robin Murphy X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" On Wed, 2020-06-10 at 13:45 +0800, CK Hu wrote: > + Tiffany & Maoguang. > > > On Sat, 2020-05-30 at 16:10 +0800, Yong Wu wrote: > > From: Maoguang Meng > > > > MTK H264 Encoder(VENC_SYS) and VP8 Encoder(VENC_LT_SYS) are two > > independent hardware instance. They have their owner interrupt, > > register mapping, and special clocks. > > > > This patch seperates the two instance. This is a preparing patch for > > adding device_link between the larbs and venc-device. It's mainly for > > fixing the problem: > > https://lkml.org/lkml/2019/9/3/316 > > > > User Call "VIDIOC_QUERYCAP": > > H264 Encoder return driver name "mtk-vcodec-enc"; > > VP8 Encoder return driver name "mtk-venc-vp8. > > Acked-by: Tiffany Lin > > Signed-off-by: Maoguang Meng > > Signed-off-by: Hsin-Yi Wang > > Signed-off-by: Irui Wang > > --- > > drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h | 10 +- > > drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c | 23 +++- > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c | 127 +++++++++------------ > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | 31 +---- > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h | 1 - > > .../media/platform/mtk-vcodec/venc/venc_vp8_if.c | 4 +- > > 6 files changed, 80 insertions(+), 116 deletions(-) > > > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > index a2716117..52d1ce1 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > @@ -19,6 +19,7 @@ > > #define MTK_VCODEC_DRV_NAME "mtk_vcodec_drv" > > #define MTK_VCODEC_DEC_NAME "mtk-vcodec-dec" > > #define MTK_VCODEC_ENC_NAME "mtk-vcodec-enc" > > +#define MTK_VENC_VP8_NAME "mtk-venc-vp8" > > #define MTK_PLATFORM_STR "platform:mt8173" > > > > #define MTK_VCODEC_MAX_PLANES 3 > > @@ -193,7 +194,6 @@ struct mtk_vcodec_pm { > > > > struct mtk_vcodec_clk venc_clk; > > struct device *larbvenc; > > - struct device *larbvenclt; > > struct device *dev; > > struct mtk_vcodec_dev *mtkdev; > > }; > > @@ -311,25 +311,27 @@ enum mtk_chip { > > * @chip: chip this encoder is compatible with > > * > > * @uses_ext: whether the encoder uses the extended firmware messaging format > > - * @has_lt_irq: whether the encoder uses the LT irq > > + * @name: whether the encoder core is vp8 > > * @min_birate: minimum supported encoding bitrate > > * @max_bitrate: maximum supported encoding bitrate > > * @capture_formats: array of supported capture formats > > * @num_capture_formats: number of entries in capture_formats > > * @output_formats: array of supported output formats > > * @num_output_formats: number of entries in output_formats > > + * @core_id: stand for h264 or vp8 encode index > > */ > > struct mtk_vcodec_enc_pdata { > > enum mtk_chip chip; > > > > bool uses_ext; > > - bool has_lt_irq; > > + const char *name; > > unsigned long min_bitrate; > > unsigned long max_bitrate; > > const struct mtk_video_fmt *capture_formats; > > size_t num_capture_formats; > > const struct mtk_video_fmt *output_formats; > > size_t num_output_formats; > > + int core_id; > > }; > > > > /** > > @@ -359,7 +361,6 @@ struct mtk_vcodec_enc_pdata { > > * > > * @dec_irq: decoder irq resource > > * @enc_irq: h264 encoder irq resource > > - * @enc_lt_irq: vp8 encoder irq resource > > * > > * @dec_mutex: decoder hardware lock > > * @enc_mutex: encoder hardware lock. > > @@ -395,7 +396,6 @@ struct mtk_vcodec_dev { > > > > int dec_irq; > > int enc_irq; > > - int enc_lt_irq; > > > > struct mutex dec_mutex; > > struct mutex enc_mutex; > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > index f0af78f..5301dca 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > @@ -9,6 +9,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "mtk_vcodec_drv.h" > > #include "mtk_vcodec_enc.h" > > @@ -174,7 +175,10 @@ static int vidioc_enum_fmt_vid_out(struct file *file, void *priv, > > static int vidioc_venc_querycap(struct file *file, void *priv, > > struct v4l2_capability *cap) > > { > > - strscpy(cap->driver, MTK_VCODEC_ENC_NAME, sizeof(cap->driver)); > > + const struct mtk_vcodec_enc_pdata *pdata = > > + fh_to_ctx(priv)->dev->venc_pdata; > > + > > + strscpy(cap->driver, pdata->name, sizeof(cap->driver)); > > strscpy(cap->bus_info, MTK_PLATFORM_STR, sizeof(cap->bus_info)); > > strscpy(cap->card, MTK_PLATFORM_STR, sizeof(cap->card)); > > > > @@ -788,7 +792,7 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > */ > > if ((ctx->state == MTK_STATE_ABORT) || (ctx->state == MTK_STATE_FREE)) { > > ret = -EIO; > > - goto err_set_param; > > + goto err_start_stream; > > } > > > > /* Do the initialization when both start_streaming have been called */ > > @@ -800,6 +804,12 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > return 0; > > } > > > > + ret = pm_runtime_get_sync(&ctx->dev->plat_dev->dev); > > + if (ret < 0) { > > + mtk_v4l2_err("pm_runtime_get_sync fail %d", ret); > > + goto err_start_stream; > > + } > > + > > mtk_venc_set_param(ctx, ¶m); > > ret = venc_if_set_param(ctx, VENC_SET_PARAM_ENC, ¶m); > > if (ret) { > > @@ -826,6 +836,11 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > return 0; > > > > err_set_param: > > + ret = pm_runtime_put(&ctx->dev->plat_dev->dev); > > + if (ret < 0) > > + mtk_v4l2_err("pm_runtime_put fail %d", ret); > > + > > +err_start_stream: > > for (i = 0; i < q->num_buffers; ++i) { > > struct vb2_buffer *buf = vb2_get_buffer(q, i); > > > > @@ -879,6 +894,10 @@ static void vb2ops_venc_stop_streaming(struct vb2_queue *q) > > if (ret) > > mtk_v4l2_err("venc_if_deinit failed=%d", ret); > > > > + ret = pm_runtime_put(&ctx->dev->plat_dev->dev); > > + if (ret < 0) > > + mtk_v4l2_err("pm_runtime_put fail %d", ret); > > + > > ctx->state = MTK_STATE_FREE; > > } > > > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > index b8fe408..fe17f0c 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > @@ -49,12 +49,15 @@ > > }, > > }; > > > > -static const struct mtk_video_fmt mtk_video_formats_capture_mt8173[] = { > > +static const struct mtk_video_fmt mtk_video_formats_capture_mt8173_h264[] = { > > { > > .fourcc = V4L2_PIX_FMT_H264, > > .type = MTK_FMT_ENC, > > .num_planes = 1, > > }, > > +}; > > + > > +static const struct mtk_video_fmt mtk_video_formats_capture_mt8173_vp8[] = { > > { > > .fourcc = V4L2_PIX_FMT_VP8, > > .type = MTK_FMT_ENC, > > @@ -110,35 +113,13 @@ static irqreturn_t mtk_vcodec_enc_irq_handler(int irq, void *priv) > > ctx = dev->curr_ctx; > > spin_unlock_irqrestore(&dev->irqlock, flags); > > > > - mtk_v4l2_debug(1, "id=%d", ctx->id); > > - addr = dev->reg_base[VENC_SYS] + MTK_VENC_IRQ_ACK_OFFSET; > > - > > - ctx->irq_status = readl(dev->reg_base[VENC_SYS] + > > - (MTK_VENC_IRQ_STATUS_OFFSET)); > > - > > - clean_irq_status(ctx->irq_status, addr); > > - > > - wake_up_ctx(ctx, MTK_INST_IRQ_RECEIVED); > > - return IRQ_HANDLED; > > -} > > - > > -static irqreturn_t mtk_vcodec_enc_lt_irq_handler(int irq, void *priv) > > -{ > > - struct mtk_vcodec_dev *dev = priv; > > - struct mtk_vcodec_ctx *ctx; > > - unsigned long flags; > > - void __iomem *addr; > > - > > - spin_lock_irqsave(&dev->irqlock, flags); > > - ctx = dev->curr_ctx; > > - spin_unlock_irqrestore(&dev->irqlock, flags); > > + mtk_v4l2_debug(1, "id=%d coreid:%d", ctx->id, dev->venc_pdata->core_id); > > + addr = dev->reg_base[dev->venc_pdata->core_id] + > > + MTK_VENC_IRQ_ACK_OFFSET; > > > > - mtk_v4l2_debug(1, "id=%d", ctx->id); > > - ctx->irq_status = readl(dev->reg_base[VENC_LT_SYS] + > > + ctx->irq_status = readl(dev->reg_base[dev->venc_pdata->core_id] + > > (MTK_VENC_IRQ_STATUS_OFFSET)); > > > > - addr = dev->reg_base[VENC_LT_SYS] + MTK_VENC_IRQ_ACK_OFFSET; > > - > > clean_irq_status(ctx->irq_status, addr); > > > > wake_up_ctx(ctx, MTK_INST_IRQ_RECEIVED); > > @@ -265,7 +246,8 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > struct resource *res; > > phandle rproc_phandle; > > enum mtk_vcodec_fw_type fw_type; > > - int i, j, ret; > > + int ret; > > + void __iomem *reg_base; > > > > dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); > > if (!dev) > > @@ -291,63 +273,39 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > dev->venc_pdata = of_device_get_match_data(&pdev->dev); > > ret = mtk_vcodec_init_enc_pm(dev); > > if (ret < 0) { > > - dev_err(&pdev->dev, "Failed to get mt vcodec clock source!"); > > + dev_err(&pdev->dev, "Failed to get mtk vcodec clock source!"); > > goto err_enc_pm; > > } > > > > - for (i = VENC_SYS, j = 0; i < NUM_MAX_VCODEC_REG_BASE; i++, j++) { > > - res = platform_get_resource(pdev, IORESOURCE_MEM, j); > > - dev->reg_base[i] = devm_ioremap_resource(&pdev->dev, res); > > - if (IS_ERR((__force void *)dev->reg_base[i])) { > > - ret = PTR_ERR((__force void *)dev->reg_base[i]); > > - goto err_res; > > - } > > - mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[i]); > > - } > > + pm_runtime_enable(&pdev->dev); > > + > > + snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s", > > + dev->venc_pdata->name); > > > > - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > > - if (res == NULL) { > > - dev_err(&pdev->dev, "failed to get irq resource"); > > - ret = -ENOENT; > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > + reg_base = devm_ioremap_resource(&pdev->dev, res); > > + if (IS_ERR((__force void *)reg_base)) { > > + ret = PTR_ERR((__force void *)reg_base); > > goto err_res; > > } > > + dev->reg_base[dev->venc_pdata->core_id] = reg_base; > > > > dev->enc_irq = platform_get_irq(pdev, 0); > > ret = devm_request_irq(&pdev->dev, dev->enc_irq, > > mtk_vcodec_enc_irq_handler, > > 0, pdev->name, dev); > > if (ret) { > > - dev_err(&pdev->dev, "Failed to install dev->enc_irq %d (%d)", > > - dev->enc_irq, > > - ret); > > + dev_err(&pdev->dev, > > + "Failed to install dev->enc_irq %d (%d) core_id:%d", > > + dev->enc_irq, ret, dev->venc_pdata->core_id); > > ret = -EINVAL; > > goto err_res; > > } > > disable_irq(dev->enc_irq); > > > > - if (dev->venc_pdata->has_lt_irq) { > > - dev->enc_lt_irq = platform_get_irq(pdev, 1); > > - ret = devm_request_irq(&pdev->dev, > > - dev->enc_lt_irq, > > - mtk_vcodec_enc_lt_irq_handler, > > - 0, pdev->name, dev); > > - if (ret) { > > - dev_err(&pdev->dev, > > - "Failed to install dev->enc_lt_irq %d (%d)", > > - dev->enc_lt_irq, ret); > > - ret = -EINVAL; > > - goto err_res; > > - } > > - disable_irq(dev->enc_lt_irq); /* VENC_LT */ > > - } > > - > > mutex_init(&dev->enc_mutex); > > mutex_init(&dev->dev_mutex); > > spin_lock_init(&dev->irqlock); > > - > > - snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s", > > - "[MTK_V4L2_VENC]"); > > - > > ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev); > > if (ret) { > > mtk_v4l2_err("v4l2_device_register err=%d", ret); > > @@ -373,7 +331,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > V4L2_CAP_STREAMING; > > > > snprintf(vfd_enc->name, sizeof(vfd_enc->name), "%s", > > - MTK_VCODEC_ENC_NAME); > > + dev->venc_pdata->name); > > video_set_drvdata(vfd_enc, dev); > > dev->vfd_enc = vfd_enc; > > platform_set_drvdata(pdev, dev); > > @@ -401,8 +359,8 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > goto err_enc_reg; > > } > > > > - mtk_v4l2_debug(0, "encoder registered as /dev/video%d", > > - vfd_enc->num); > > + mtk_v4l2_debug(0, "encoder %d registered as /dev/video%d", > > + dev->venc_pdata->core_id, vfd_enc->num); > > > > return 0; > > > > @@ -415,26 +373,39 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > err_enc_alloc: > > v4l2_device_unregister(&dev->v4l2_dev); > > err_res: > > - mtk_vcodec_release_enc_pm(dev); > > + pm_runtime_disable(&pdev->dev); > > err_enc_pm: > > mtk_vcodec_fw_release(dev->fw_handler); > > return ret; > > } > > > > -static const struct mtk_vcodec_enc_pdata mt8173_pdata = { > > +static const struct mtk_vcodec_enc_pdata mt8173_avc_pdata = { > > + .chip = MTK_MT8173, > > + .name = MTK_VCODEC_ENC_NAME, > > + .capture_formats = mtk_video_formats_capture_mt8173_h264, > > + .num_capture_formats = 1, > > + .output_formats = mtk_video_formats_output_mt8173, > > + .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > + .min_bitrate = 1, > > + .max_bitrate = 4000000, > > + .core_id = VENC_SYS, > > +}; > > + > > +static const struct mtk_vcodec_enc_pdata mt8173_vp8_pdata = { > > .chip = MTK_MT8173, > > - .has_lt_irq = true, > > - .capture_formats = mtk_video_formats_capture_mt8173, > > - .num_capture_formats = ARRAY_SIZE(mtk_video_formats_capture_mt8173), > > + .name = MTK_VENC_VP8_NAME, > > + .capture_formats = mtk_video_formats_capture_mt8173_vp8, > > + .num_capture_formats = 1, > > .output_formats = mtk_video_formats_output_mt8173, > > .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > .min_bitrate = 1, > > .max_bitrate = 4000000, > > + .core_id = VENC_LT_SYS, > > }; > > > > static const struct mtk_vcodec_enc_pdata mt8183_pdata = { > > .chip = MTK_MT8183, > > - .has_lt_irq = false, > > + .name = MTK_VCODEC_ENC_NAME, > > .uses_ext = true, > > .capture_formats = mtk_video_formats_capture_mt8183, > > .num_capture_formats = ARRAY_SIZE(mtk_video_formats_capture_mt8183), > > @@ -443,10 +414,14 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > .min_bitrate = 64, > > .max_bitrate = 40000000, > > + .core_id = VENC_SYS, > > }; > > > > static const struct of_device_id mtk_vcodec_enc_match[] = { > > - {.compatible = "mediatek,mt8173-vcodec-enc", .data = &mt8173_pdata}, > > + {.compatible = "mediatek,mt8173-vcodec-avc-enc", > > + .data = &mt8173_avc_pdata}, > > + {.compatible = "mediatek,mt8173-vcodec-vp8-enc", > > + .data = &mt8173_vp8_pdata}, > > {.compatible = "mediatek,mt8183-vcodec-enc", .data = &mt8183_pdata}, > > {}, > > }; > > @@ -466,7 +441,7 @@ static int mtk_vcodec_enc_remove(struct platform_device *pdev) > > video_unregister_device(dev->vfd_enc); > > > > v4l2_device_unregister(&dev->v4l2_dev); > > - mtk_vcodec_release_enc_pm(dev); > > + pm_runtime_disable(&pdev->dev); > > mtk_vcodec_fw_release(dev->fw_handler); > > return 0; > > } > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > index ee22902..01c6a55 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > @@ -43,21 +43,6 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) > > return -ENODEV; > > } > > pm->larbvenc = &pdev->dev; > > - > > - node = of_parse_phandle(dev->of_node, "mediatek,larb", 1); > > - if (!node) { > > - mtk_v4l2_err("no mediatek,larb found"); > > - return -ENODEV; > > - } > > - > > - pdev = of_find_device_by_node(node); > > - of_node_put(node); > > - if (!pdev) { > > - mtk_v4l2_err("no mediatek,larb device found"); > > - return -ENODEV; > > - } > > - > > - pm->larbvenclt = &pdev->dev; > > pdev = mtkdev->plat_dev; > > pm->dev = &pdev->dev; > > > > @@ -94,11 +79,6 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) > > return ret; > > } > > > > -void mtk_vcodec_release_enc_pm(struct mtk_vcodec_dev *mtkdev) > > -{ > > -} > > - > > - > > void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm) > > { > > struct mtk_vcodec_clk *enc_clk = &pm->venc_clk; > > @@ -116,18 +96,10 @@ void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm) > > ret = mtk_smi_larb_get(pm->larbvenc); > > if (ret) { > > mtk_v4l2_err("mtk_smi_larb_get larb3 fail %d", ret); > > - goto larbvencerr; > > - } > > - ret = mtk_smi_larb_get(pm->larbvenclt); > > - if (ret) { > > - mtk_v4l2_err("mtk_smi_larb_get larb4 fail %d", ret); > > - goto larbvenclterr; > > + goto clkerr; > > } > > return; > > > > -larbvenclterr: > > - mtk_smi_larb_put(pm->larbvenc); > > -larbvencerr: > > clkerr: > > for (i -= 1; i >= 0; i--) > > clk_disable_unprepare(enc_clk->clk_info[i].vcodec_clk); > > @@ -139,7 +111,6 @@ void mtk_vcodec_enc_clock_off(struct mtk_vcodec_pm *pm) > > int i = 0; > > > > mtk_smi_larb_put(pm->larbvenc); > > - mtk_smi_larb_put(pm->larbvenclt); > > for (i = enc_clk->clk_num - 1; i >= 0; i--) > > clk_disable_unprepare(enc_clk->clk_info[i].vcodec_clk); > > } > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > index b7ecdfd..c1b5986 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > @@ -10,7 +10,6 @@ > > #include "mtk_vcodec_drv.h" > > > > int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *dev); > > -void mtk_vcodec_release_enc_pm(struct mtk_vcodec_dev *dev); > > > > void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm); > > void mtk_vcodec_enc_clock_off(struct mtk_vcodec_pm *pm); > > diff --git a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > index 11abb19..8267a9c 100644 > > --- a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > +++ b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > @@ -367,7 +367,7 @@ static int vp8_enc_encode(void *handle, > > > > mtk_vcodec_debug_enter(inst); > > > > - enable_irq(ctx->dev->enc_lt_irq); > > + enable_irq(ctx->dev->enc_irq); > > > > switch (opt) { > > case VENC_START_OPT_ENCODE_FRAME: > > @@ -386,7 +386,7 @@ static int vp8_enc_encode(void *handle, > > > > encode_err: > > > > - disable_irq(ctx->dev->enc_lt_irq); > > + disable_irq(ctx->dev->enc_irq); > > mtk_vcodec_debug_leave(inst); > > > > return ret; > > _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable 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 9E37FC433DF for ; Wed, 10 Jun 2020 06:13:46 +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 6C74620734 for ; Wed, 10 Jun 2020 06:13:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Fds/IlKp"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="uaHJqiH0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6C74620734 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=0lNc4zYedIaekU2wW7qEtg9Js1Dw6t5HjMnAe1Yqf5E=; b=Fds/IlKpDH7sya o8WV03I+kmHJPlqjvuMOWxC8sb3Zdo120YZC/a/pRT5f12z/5Mw+YPdStf9WlaG5JQsUQC1sp6/jB yuyMoITNSmMYEb+HgIZa8EQ+yrOaCNaJskePag3vzKBIiwl+CqkDVQDjebP38bozAVPUahLSBB85u iZVldMJJEWyZCIxuxtYKlIU3w92B3tvvht9OhJpNHHX8LEbQ0Y2Xu4kQfc2gpnt9ITRkNNQRC2Zs9 c1Iv7hWGQrmqWSL4eCYsDHxfcWPgETPKRNdHJNUZZkCFYcA9ts2FjmVbS2Y3gjGHihFruUILa3R+B 8TZJkCEpWwFAGQrloKlw==; 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 1jitzU-0000Dn-EH; Wed, 10 Jun 2020 06:13:36 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jitzR-0000D5-2K; Wed, 10 Jun 2020 06:13:35 +0000 X-UUID: 4922c17dce7c49f093506012962400e2-20200609 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=7g39zsjgFbQQQ8ejglrHczGR1a++BpoBzudTSZ8Hps4=; b=uaHJqiH0tLmK/1yN2zNK7KDktu8iP5abxoyUwAHK693KNuJe86clJVd6IqPsHTAUmJUQ1FeInPNlxtyZH4qBVX/e8EaYqsRitNmGqmC0SZ6n/TWqF6Tykq59QwCJ4lNJehG/cDHgKLloy30JMfRSUco3VYJFgUq8aEJKi2sTx6I=; X-UUID: 4922c17dce7c49f093506012962400e2-20200609 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1263557756; Tue, 09 Jun 2020 22:13:08 -0800 Received: from mtkmbs08n2.mediatek.inc (172.21.101.56) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 9 Jun 2020 23:13:24 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 10 Jun 2020 14:13:21 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 10 Jun 2020 14:13:21 +0800 Message-ID: <1591769602.5047.3.camel@mtksdaap41> Subject: Re: [PATCH v4 08/17] media: mtk-vcodec: separate mtk-vcodec-enc node. From: Tiffany Lin To: CK Hu Date: Wed, 10 Jun 2020 14:13:22 +0800 In-Reply-To: <1591767911.527.5.camel@mtksdaap41> References: <1590826218-23653-1-git-send-email-yong.wu@mediatek.com> <1590826218-23653-9-git-send-email-yong.wu@mediatek.com> <1591767911.527.5.camel@mtksdaap41> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 22ADA025ED1332B9CD66379BF85F4C85BC2E639A6CED8FB4692F0EBDB9041AB62000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200609_231333_126130_3B536CD0 X-CRM114-Status: GOOD ( 24.10 ) 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: Maoguang Meng , Will Deacon , youlin.pei@mediatek.com, Irui Wang , Nicolas Boichat , Joerg Roedel , Evan Green , eizan@chromium.org, Matthias Kaehlcke , Yong Wu , devicetree@vger.kernel.org, cui.zhang@mediatek.com, Tomasz Figa , Rob Herring , linux-mediatek@lists.infradead.org, Hsin-Yi Wang , Matthias Brugger , ming-fan.chen@mediatek.com, linux-arm-kernel@lists.infradead.org, anan.sun@mediatek.com, acourbot@chromium.org, srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, chao.hao@mediatek.com, iommu@lists.linux-foundation.org, Robin Murphy 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 On Wed, 2020-06-10 at 13:45 +0800, CK Hu wrote: > + Tiffany & Maoguang. > > > On Sat, 2020-05-30 at 16:10 +0800, Yong Wu wrote: > > From: Maoguang Meng > > > > MTK H264 Encoder(VENC_SYS) and VP8 Encoder(VENC_LT_SYS) are two > > independent hardware instance. They have their owner interrupt, > > register mapping, and special clocks. > > > > This patch seperates the two instance. This is a preparing patch for > > adding device_link between the larbs and venc-device. It's mainly for > > fixing the problem: > > https://lkml.org/lkml/2019/9/3/316 > > > > User Call "VIDIOC_QUERYCAP": > > H264 Encoder return driver name "mtk-vcodec-enc"; > > VP8 Encoder return driver name "mtk-venc-vp8. > > Acked-by: Tiffany Lin > > Signed-off-by: Maoguang Meng > > Signed-off-by: Hsin-Yi Wang > > Signed-off-by: Irui Wang > > --- > > drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h | 10 +- > > drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c | 23 +++- > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c | 127 +++++++++------------ > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | 31 +---- > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h | 1 - > > .../media/platform/mtk-vcodec/venc/venc_vp8_if.c | 4 +- > > 6 files changed, 80 insertions(+), 116 deletions(-) > > > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > index a2716117..52d1ce1 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > @@ -19,6 +19,7 @@ > > #define MTK_VCODEC_DRV_NAME "mtk_vcodec_drv" > > #define MTK_VCODEC_DEC_NAME "mtk-vcodec-dec" > > #define MTK_VCODEC_ENC_NAME "mtk-vcodec-enc" > > +#define MTK_VENC_VP8_NAME "mtk-venc-vp8" > > #define MTK_PLATFORM_STR "platform:mt8173" > > > > #define MTK_VCODEC_MAX_PLANES 3 > > @@ -193,7 +194,6 @@ struct mtk_vcodec_pm { > > > > struct mtk_vcodec_clk venc_clk; > > struct device *larbvenc; > > - struct device *larbvenclt; > > struct device *dev; > > struct mtk_vcodec_dev *mtkdev; > > }; > > @@ -311,25 +311,27 @@ enum mtk_chip { > > * @chip: chip this encoder is compatible with > > * > > * @uses_ext: whether the encoder uses the extended firmware messaging format > > - * @has_lt_irq: whether the encoder uses the LT irq > > + * @name: whether the encoder core is vp8 > > * @min_birate: minimum supported encoding bitrate > > * @max_bitrate: maximum supported encoding bitrate > > * @capture_formats: array of supported capture formats > > * @num_capture_formats: number of entries in capture_formats > > * @output_formats: array of supported output formats > > * @num_output_formats: number of entries in output_formats > > + * @core_id: stand for h264 or vp8 encode index > > */ > > struct mtk_vcodec_enc_pdata { > > enum mtk_chip chip; > > > > bool uses_ext; > > - bool has_lt_irq; > > + const char *name; > > unsigned long min_bitrate; > > unsigned long max_bitrate; > > const struct mtk_video_fmt *capture_formats; > > size_t num_capture_formats; > > const struct mtk_video_fmt *output_formats; > > size_t num_output_formats; > > + int core_id; > > }; > > > > /** > > @@ -359,7 +361,6 @@ struct mtk_vcodec_enc_pdata { > > * > > * @dec_irq: decoder irq resource > > * @enc_irq: h264 encoder irq resource > > - * @enc_lt_irq: vp8 encoder irq resource > > * > > * @dec_mutex: decoder hardware lock > > * @enc_mutex: encoder hardware lock. > > @@ -395,7 +396,6 @@ struct mtk_vcodec_dev { > > > > int dec_irq; > > int enc_irq; > > - int enc_lt_irq; > > > > struct mutex dec_mutex; > > struct mutex enc_mutex; > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > index f0af78f..5301dca 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > @@ -9,6 +9,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "mtk_vcodec_drv.h" > > #include "mtk_vcodec_enc.h" > > @@ -174,7 +175,10 @@ static int vidioc_enum_fmt_vid_out(struct file *file, void *priv, > > static int vidioc_venc_querycap(struct file *file, void *priv, > > struct v4l2_capability *cap) > > { > > - strscpy(cap->driver, MTK_VCODEC_ENC_NAME, sizeof(cap->driver)); > > + const struct mtk_vcodec_enc_pdata *pdata = > > + fh_to_ctx(priv)->dev->venc_pdata; > > + > > + strscpy(cap->driver, pdata->name, sizeof(cap->driver)); > > strscpy(cap->bus_info, MTK_PLATFORM_STR, sizeof(cap->bus_info)); > > strscpy(cap->card, MTK_PLATFORM_STR, sizeof(cap->card)); > > > > @@ -788,7 +792,7 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > */ > > if ((ctx->state == MTK_STATE_ABORT) || (ctx->state == MTK_STATE_FREE)) { > > ret = -EIO; > > - goto err_set_param; > > + goto err_start_stream; > > } > > > > /* Do the initialization when both start_streaming have been called */ > > @@ -800,6 +804,12 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > return 0; > > } > > > > + ret = pm_runtime_get_sync(&ctx->dev->plat_dev->dev); > > + if (ret < 0) { > > + mtk_v4l2_err("pm_runtime_get_sync fail %d", ret); > > + goto err_start_stream; > > + } > > + > > mtk_venc_set_param(ctx, ¶m); > > ret = venc_if_set_param(ctx, VENC_SET_PARAM_ENC, ¶m); > > if (ret) { > > @@ -826,6 +836,11 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > return 0; > > > > err_set_param: > > + ret = pm_runtime_put(&ctx->dev->plat_dev->dev); > > + if (ret < 0) > > + mtk_v4l2_err("pm_runtime_put fail %d", ret); > > + > > +err_start_stream: > > for (i = 0; i < q->num_buffers; ++i) { > > struct vb2_buffer *buf = vb2_get_buffer(q, i); > > > > @@ -879,6 +894,10 @@ static void vb2ops_venc_stop_streaming(struct vb2_queue *q) > > if (ret) > > mtk_v4l2_err("venc_if_deinit failed=%d", ret); > > > > + ret = pm_runtime_put(&ctx->dev->plat_dev->dev); > > + if (ret < 0) > > + mtk_v4l2_err("pm_runtime_put fail %d", ret); > > + > > ctx->state = MTK_STATE_FREE; > > } > > > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > index b8fe408..fe17f0c 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > @@ -49,12 +49,15 @@ > > }, > > }; > > > > -static const struct mtk_video_fmt mtk_video_formats_capture_mt8173[] = { > > +static const struct mtk_video_fmt mtk_video_formats_capture_mt8173_h264[] = { > > { > > .fourcc = V4L2_PIX_FMT_H264, > > .type = MTK_FMT_ENC, > > .num_planes = 1, > > }, > > +}; > > + > > +static const struct mtk_video_fmt mtk_video_formats_capture_mt8173_vp8[] = { > > { > > .fourcc = V4L2_PIX_FMT_VP8, > > .type = MTK_FMT_ENC, > > @@ -110,35 +113,13 @@ static irqreturn_t mtk_vcodec_enc_irq_handler(int irq, void *priv) > > ctx = dev->curr_ctx; > > spin_unlock_irqrestore(&dev->irqlock, flags); > > > > - mtk_v4l2_debug(1, "id=%d", ctx->id); > > - addr = dev->reg_base[VENC_SYS] + MTK_VENC_IRQ_ACK_OFFSET; > > - > > - ctx->irq_status = readl(dev->reg_base[VENC_SYS] + > > - (MTK_VENC_IRQ_STATUS_OFFSET)); > > - > > - clean_irq_status(ctx->irq_status, addr); > > - > > - wake_up_ctx(ctx, MTK_INST_IRQ_RECEIVED); > > - return IRQ_HANDLED; > > -} > > - > > -static irqreturn_t mtk_vcodec_enc_lt_irq_handler(int irq, void *priv) > > -{ > > - struct mtk_vcodec_dev *dev = priv; > > - struct mtk_vcodec_ctx *ctx; > > - unsigned long flags; > > - void __iomem *addr; > > - > > - spin_lock_irqsave(&dev->irqlock, flags); > > - ctx = dev->curr_ctx; > > - spin_unlock_irqrestore(&dev->irqlock, flags); > > + mtk_v4l2_debug(1, "id=%d coreid:%d", ctx->id, dev->venc_pdata->core_id); > > + addr = dev->reg_base[dev->venc_pdata->core_id] + > > + MTK_VENC_IRQ_ACK_OFFSET; > > > > - mtk_v4l2_debug(1, "id=%d", ctx->id); > > - ctx->irq_status = readl(dev->reg_base[VENC_LT_SYS] + > > + ctx->irq_status = readl(dev->reg_base[dev->venc_pdata->core_id] + > > (MTK_VENC_IRQ_STATUS_OFFSET)); > > > > - addr = dev->reg_base[VENC_LT_SYS] + MTK_VENC_IRQ_ACK_OFFSET; > > - > > clean_irq_status(ctx->irq_status, addr); > > > > wake_up_ctx(ctx, MTK_INST_IRQ_RECEIVED); > > @@ -265,7 +246,8 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > struct resource *res; > > phandle rproc_phandle; > > enum mtk_vcodec_fw_type fw_type; > > - int i, j, ret; > > + int ret; > > + void __iomem *reg_base; > > > > dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); > > if (!dev) > > @@ -291,63 +273,39 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > dev->venc_pdata = of_device_get_match_data(&pdev->dev); > > ret = mtk_vcodec_init_enc_pm(dev); > > if (ret < 0) { > > - dev_err(&pdev->dev, "Failed to get mt vcodec clock source!"); > > + dev_err(&pdev->dev, "Failed to get mtk vcodec clock source!"); > > goto err_enc_pm; > > } > > > > - for (i = VENC_SYS, j = 0; i < NUM_MAX_VCODEC_REG_BASE; i++, j++) { > > - res = platform_get_resource(pdev, IORESOURCE_MEM, j); > > - dev->reg_base[i] = devm_ioremap_resource(&pdev->dev, res); > > - if (IS_ERR((__force void *)dev->reg_base[i])) { > > - ret = PTR_ERR((__force void *)dev->reg_base[i]); > > - goto err_res; > > - } > > - mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[i]); > > - } > > + pm_runtime_enable(&pdev->dev); > > + > > + snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s", > > + dev->venc_pdata->name); > > > > - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > > - if (res == NULL) { > > - dev_err(&pdev->dev, "failed to get irq resource"); > > - ret = -ENOENT; > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > + reg_base = devm_ioremap_resource(&pdev->dev, res); > > + if (IS_ERR((__force void *)reg_base)) { > > + ret = PTR_ERR((__force void *)reg_base); > > goto err_res; > > } > > + dev->reg_base[dev->venc_pdata->core_id] = reg_base; > > > > dev->enc_irq = platform_get_irq(pdev, 0); > > ret = devm_request_irq(&pdev->dev, dev->enc_irq, > > mtk_vcodec_enc_irq_handler, > > 0, pdev->name, dev); > > if (ret) { > > - dev_err(&pdev->dev, "Failed to install dev->enc_irq %d (%d)", > > - dev->enc_irq, > > - ret); > > + dev_err(&pdev->dev, > > + "Failed to install dev->enc_irq %d (%d) core_id:%d", > > + dev->enc_irq, ret, dev->venc_pdata->core_id); > > ret = -EINVAL; > > goto err_res; > > } > > disable_irq(dev->enc_irq); > > > > - if (dev->venc_pdata->has_lt_irq) { > > - dev->enc_lt_irq = platform_get_irq(pdev, 1); > > - ret = devm_request_irq(&pdev->dev, > > - dev->enc_lt_irq, > > - mtk_vcodec_enc_lt_irq_handler, > > - 0, pdev->name, dev); > > - if (ret) { > > - dev_err(&pdev->dev, > > - "Failed to install dev->enc_lt_irq %d (%d)", > > - dev->enc_lt_irq, ret); > > - ret = -EINVAL; > > - goto err_res; > > - } > > - disable_irq(dev->enc_lt_irq); /* VENC_LT */ > > - } > > - > > mutex_init(&dev->enc_mutex); > > mutex_init(&dev->dev_mutex); > > spin_lock_init(&dev->irqlock); > > - > > - snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s", > > - "[MTK_V4L2_VENC]"); > > - > > ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev); > > if (ret) { > > mtk_v4l2_err("v4l2_device_register err=%d", ret); > > @@ -373,7 +331,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > V4L2_CAP_STREAMING; > > > > snprintf(vfd_enc->name, sizeof(vfd_enc->name), "%s", > > - MTK_VCODEC_ENC_NAME); > > + dev->venc_pdata->name); > > video_set_drvdata(vfd_enc, dev); > > dev->vfd_enc = vfd_enc; > > platform_set_drvdata(pdev, dev); > > @@ -401,8 +359,8 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > goto err_enc_reg; > > } > > > > - mtk_v4l2_debug(0, "encoder registered as /dev/video%d", > > - vfd_enc->num); > > + mtk_v4l2_debug(0, "encoder %d registered as /dev/video%d", > > + dev->venc_pdata->core_id, vfd_enc->num); > > > > return 0; > > > > @@ -415,26 +373,39 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > err_enc_alloc: > > v4l2_device_unregister(&dev->v4l2_dev); > > err_res: > > - mtk_vcodec_release_enc_pm(dev); > > + pm_runtime_disable(&pdev->dev); > > err_enc_pm: > > mtk_vcodec_fw_release(dev->fw_handler); > > return ret; > > } > > > > -static const struct mtk_vcodec_enc_pdata mt8173_pdata = { > > +static const struct mtk_vcodec_enc_pdata mt8173_avc_pdata = { > > + .chip = MTK_MT8173, > > + .name = MTK_VCODEC_ENC_NAME, > > + .capture_formats = mtk_video_formats_capture_mt8173_h264, > > + .num_capture_formats = 1, > > + .output_formats = mtk_video_formats_output_mt8173, > > + .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > + .min_bitrate = 1, > > + .max_bitrate = 4000000, > > + .core_id = VENC_SYS, > > +}; > > + > > +static const struct mtk_vcodec_enc_pdata mt8173_vp8_pdata = { > > .chip = MTK_MT8173, > > - .has_lt_irq = true, > > - .capture_formats = mtk_video_formats_capture_mt8173, > > - .num_capture_formats = ARRAY_SIZE(mtk_video_formats_capture_mt8173), > > + .name = MTK_VENC_VP8_NAME, > > + .capture_formats = mtk_video_formats_capture_mt8173_vp8, > > + .num_capture_formats = 1, > > .output_formats = mtk_video_formats_output_mt8173, > > .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > .min_bitrate = 1, > > .max_bitrate = 4000000, > > + .core_id = VENC_LT_SYS, > > }; > > > > static const struct mtk_vcodec_enc_pdata mt8183_pdata = { > > .chip = MTK_MT8183, > > - .has_lt_irq = false, > > + .name = MTK_VCODEC_ENC_NAME, > > .uses_ext = true, > > .capture_formats = mtk_video_formats_capture_mt8183, > > .num_capture_formats = ARRAY_SIZE(mtk_video_formats_capture_mt8183), > > @@ -443,10 +414,14 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > .min_bitrate = 64, > > .max_bitrate = 40000000, > > + .core_id = VENC_SYS, > > }; > > > > static const struct of_device_id mtk_vcodec_enc_match[] = { > > - {.compatible = "mediatek,mt8173-vcodec-enc", .data = &mt8173_pdata}, > > + {.compatible = "mediatek,mt8173-vcodec-avc-enc", > > + .data = &mt8173_avc_pdata}, > > + {.compatible = "mediatek,mt8173-vcodec-vp8-enc", > > + .data = &mt8173_vp8_pdata}, > > {.compatible = "mediatek,mt8183-vcodec-enc", .data = &mt8183_pdata}, > > {}, > > }; > > @@ -466,7 +441,7 @@ static int mtk_vcodec_enc_remove(struct platform_device *pdev) > > video_unregister_device(dev->vfd_enc); > > > > v4l2_device_unregister(&dev->v4l2_dev); > > - mtk_vcodec_release_enc_pm(dev); > > + pm_runtime_disable(&pdev->dev); > > mtk_vcodec_fw_release(dev->fw_handler); > > return 0; > > } > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > index ee22902..01c6a55 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > @@ -43,21 +43,6 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) > > return -ENODEV; > > } > > pm->larbvenc = &pdev->dev; > > - > > - node = of_parse_phandle(dev->of_node, "mediatek,larb", 1); > > - if (!node) { > > - mtk_v4l2_err("no mediatek,larb found"); > > - return -ENODEV; > > - } > > - > > - pdev = of_find_device_by_node(node); > > - of_node_put(node); > > - if (!pdev) { > > - mtk_v4l2_err("no mediatek,larb device found"); > > - return -ENODEV; > > - } > > - > > - pm->larbvenclt = &pdev->dev; > > pdev = mtkdev->plat_dev; > > pm->dev = &pdev->dev; > > > > @@ -94,11 +79,6 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) > > return ret; > > } > > > > -void mtk_vcodec_release_enc_pm(struct mtk_vcodec_dev *mtkdev) > > -{ > > -} > > - > > - > > void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm) > > { > > struct mtk_vcodec_clk *enc_clk = &pm->venc_clk; > > @@ -116,18 +96,10 @@ void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm) > > ret = mtk_smi_larb_get(pm->larbvenc); > > if (ret) { > > mtk_v4l2_err("mtk_smi_larb_get larb3 fail %d", ret); > > - goto larbvencerr; > > - } > > - ret = mtk_smi_larb_get(pm->larbvenclt); > > - if (ret) { > > - mtk_v4l2_err("mtk_smi_larb_get larb4 fail %d", ret); > > - goto larbvenclterr; > > + goto clkerr; > > } > > return; > > > > -larbvenclterr: > > - mtk_smi_larb_put(pm->larbvenc); > > -larbvencerr: > > clkerr: > > for (i -= 1; i >= 0; i--) > > clk_disable_unprepare(enc_clk->clk_info[i].vcodec_clk); > > @@ -139,7 +111,6 @@ void mtk_vcodec_enc_clock_off(struct mtk_vcodec_pm *pm) > > int i = 0; > > > > mtk_smi_larb_put(pm->larbvenc); > > - mtk_smi_larb_put(pm->larbvenclt); > > for (i = enc_clk->clk_num - 1; i >= 0; i--) > > clk_disable_unprepare(enc_clk->clk_info[i].vcodec_clk); > > } > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > index b7ecdfd..c1b5986 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > @@ -10,7 +10,6 @@ > > #include "mtk_vcodec_drv.h" > > > > int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *dev); > > -void mtk_vcodec_release_enc_pm(struct mtk_vcodec_dev *dev); > > > > void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm); > > void mtk_vcodec_enc_clock_off(struct mtk_vcodec_pm *pm); > > diff --git a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > index 11abb19..8267a9c 100644 > > --- a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > +++ b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > @@ -367,7 +367,7 @@ static int vp8_enc_encode(void *handle, > > > > mtk_vcodec_debug_enter(inst); > > > > - enable_irq(ctx->dev->enc_lt_irq); > > + enable_irq(ctx->dev->enc_irq); > > > > switch (opt) { > > case VENC_START_OPT_ENCODE_FRAME: > > @@ -386,7 +386,7 @@ static int vp8_enc_encode(void *handle, > > > > encode_err: > > > > - disable_irq(ctx->dev->enc_lt_irq); > > + disable_irq(ctx->dev->enc_irq); > > mtk_vcodec_debug_leave(inst); > > > > return ret; > > _______________________________________________ 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=ham 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 6180CC433E0 for ; Wed, 10 Jun 2020 06:13:46 +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 29C0720734 for ; Wed, 10 Jun 2020 06:13:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="S0lwb8fn"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="uaHJqiH0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 29C0720734 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=MeHSwsQmV830DscmfBMbMZJ6ArdRIdTJ8EV8UbCbjVs=; b=S0lwb8fnFxF4nY IGSdDz3O8hKHlp0g6h8pPczIzAO2ExX33nt3sfobYQ95Sclsgq8bvbNVbXkMn2+M1WwClFt8r9t8p zGKefh1xCvd8i1QrY41e3HIy0og+W2K+7Ja9z5xvKse9eO1ReOJqXDIbffpfUCiWiWwPhJ8URYkpf 6GwvAy0numN+nj9yniTFnuxM77Xgl6eqjJ8/XLmp6+ZZyImlzkUIR1GHr4h/YJHWygc7xl9rNOu1D lW+So2uTLNhuTNLEmnbDZ0TJWXPkF05xZ+2v2sJsX04CkgZbWjHpDxnZc8CoHwlLJiCqcPBRCJlA3 lUTjX52c2E142nMpBKnQ==; 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 1jitzV-0000EW-Dm; Wed, 10 Jun 2020 06:13:37 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jitzR-0000D5-2K; Wed, 10 Jun 2020 06:13:35 +0000 X-UUID: 4922c17dce7c49f093506012962400e2-20200609 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=7g39zsjgFbQQQ8ejglrHczGR1a++BpoBzudTSZ8Hps4=; b=uaHJqiH0tLmK/1yN2zNK7KDktu8iP5abxoyUwAHK693KNuJe86clJVd6IqPsHTAUmJUQ1FeInPNlxtyZH4qBVX/e8EaYqsRitNmGqmC0SZ6n/TWqF6Tykq59QwCJ4lNJehG/cDHgKLloy30JMfRSUco3VYJFgUq8aEJKi2sTx6I=; X-UUID: 4922c17dce7c49f093506012962400e2-20200609 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 1263557756; Tue, 09 Jun 2020 22:13:08 -0800 Received: from mtkmbs08n2.mediatek.inc (172.21.101.56) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 9 Jun 2020 23:13:24 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 10 Jun 2020 14:13:21 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 10 Jun 2020 14:13:21 +0800 Message-ID: <1591769602.5047.3.camel@mtksdaap41> Subject: Re: [PATCH v4 08/17] media: mtk-vcodec: separate mtk-vcodec-enc node. From: Tiffany Lin To: CK Hu Date: Wed, 10 Jun 2020 14:13:22 +0800 In-Reply-To: <1591767911.527.5.camel@mtksdaap41> References: <1590826218-23653-1-git-send-email-yong.wu@mediatek.com> <1590826218-23653-9-git-send-email-yong.wu@mediatek.com> <1591767911.527.5.camel@mtksdaap41> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 22ADA025ED1332B9CD66379BF85F4C85BC2E639A6CED8FB4692F0EBDB9041AB62000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200609_231333_126130_3B536CD0 X-CRM114-Status: GOOD ( 24.10 ) 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: Maoguang Meng , Will Deacon , youlin.pei@mediatek.com, Irui Wang , Nicolas Boichat , Joerg Roedel , Evan Green , eizan@chromium.org, Matthias Kaehlcke , Yong Wu , devicetree@vger.kernel.org, cui.zhang@mediatek.com, Tomasz Figa , Rob Herring , linux-mediatek@lists.infradead.org, Hsin-Yi Wang , Matthias Brugger , ming-fan.chen@mediatek.com, linux-arm-kernel@lists.infradead.org, anan.sun@mediatek.com, acourbot@chromium.org, srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, chao.hao@mediatek.com, iommu@lists.linux-foundation.org, Robin Murphy 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 On Wed, 2020-06-10 at 13:45 +0800, CK Hu wrote: > + Tiffany & Maoguang. > > > On Sat, 2020-05-30 at 16:10 +0800, Yong Wu wrote: > > From: Maoguang Meng > > > > MTK H264 Encoder(VENC_SYS) and VP8 Encoder(VENC_LT_SYS) are two > > independent hardware instance. They have their owner interrupt, > > register mapping, and special clocks. > > > > This patch seperates the two instance. This is a preparing patch for > > adding device_link between the larbs and venc-device. It's mainly for > > fixing the problem: > > https://lkml.org/lkml/2019/9/3/316 > > > > User Call "VIDIOC_QUERYCAP": > > H264 Encoder return driver name "mtk-vcodec-enc"; > > VP8 Encoder return driver name "mtk-venc-vp8. > > Acked-by: Tiffany Lin > > Signed-off-by: Maoguang Meng > > Signed-off-by: Hsin-Yi Wang > > Signed-off-by: Irui Wang > > --- > > drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h | 10 +- > > drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c | 23 +++- > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c | 127 +++++++++------------ > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c | 31 +---- > > .../media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h | 1 - > > .../media/platform/mtk-vcodec/venc/venc_vp8_if.c | 4 +- > > 6 files changed, 80 insertions(+), 116 deletions(-) > > > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > index a2716117..52d1ce1 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > > @@ -19,6 +19,7 @@ > > #define MTK_VCODEC_DRV_NAME "mtk_vcodec_drv" > > #define MTK_VCODEC_DEC_NAME "mtk-vcodec-dec" > > #define MTK_VCODEC_ENC_NAME "mtk-vcodec-enc" > > +#define MTK_VENC_VP8_NAME "mtk-venc-vp8" > > #define MTK_PLATFORM_STR "platform:mt8173" > > > > #define MTK_VCODEC_MAX_PLANES 3 > > @@ -193,7 +194,6 @@ struct mtk_vcodec_pm { > > > > struct mtk_vcodec_clk venc_clk; > > struct device *larbvenc; > > - struct device *larbvenclt; > > struct device *dev; > > struct mtk_vcodec_dev *mtkdev; > > }; > > @@ -311,25 +311,27 @@ enum mtk_chip { > > * @chip: chip this encoder is compatible with > > * > > * @uses_ext: whether the encoder uses the extended firmware messaging format > > - * @has_lt_irq: whether the encoder uses the LT irq > > + * @name: whether the encoder core is vp8 > > * @min_birate: minimum supported encoding bitrate > > * @max_bitrate: maximum supported encoding bitrate > > * @capture_formats: array of supported capture formats > > * @num_capture_formats: number of entries in capture_formats > > * @output_formats: array of supported output formats > > * @num_output_formats: number of entries in output_formats > > + * @core_id: stand for h264 or vp8 encode index > > */ > > struct mtk_vcodec_enc_pdata { > > enum mtk_chip chip; > > > > bool uses_ext; > > - bool has_lt_irq; > > + const char *name; > > unsigned long min_bitrate; > > unsigned long max_bitrate; > > const struct mtk_video_fmt *capture_formats; > > size_t num_capture_formats; > > const struct mtk_video_fmt *output_formats; > > size_t num_output_formats; > > + int core_id; > > }; > > > > /** > > @@ -359,7 +361,6 @@ struct mtk_vcodec_enc_pdata { > > * > > * @dec_irq: decoder irq resource > > * @enc_irq: h264 encoder irq resource > > - * @enc_lt_irq: vp8 encoder irq resource > > * > > * @dec_mutex: decoder hardware lock > > * @enc_mutex: encoder hardware lock. > > @@ -395,7 +396,6 @@ struct mtk_vcodec_dev { > > > > int dec_irq; > > int enc_irq; > > - int enc_lt_irq; > > > > struct mutex dec_mutex; > > struct mutex enc_mutex; > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > index f0af78f..5301dca 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > > @@ -9,6 +9,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "mtk_vcodec_drv.h" > > #include "mtk_vcodec_enc.h" > > @@ -174,7 +175,10 @@ static int vidioc_enum_fmt_vid_out(struct file *file, void *priv, > > static int vidioc_venc_querycap(struct file *file, void *priv, > > struct v4l2_capability *cap) > > { > > - strscpy(cap->driver, MTK_VCODEC_ENC_NAME, sizeof(cap->driver)); > > + const struct mtk_vcodec_enc_pdata *pdata = > > + fh_to_ctx(priv)->dev->venc_pdata; > > + > > + strscpy(cap->driver, pdata->name, sizeof(cap->driver)); > > strscpy(cap->bus_info, MTK_PLATFORM_STR, sizeof(cap->bus_info)); > > strscpy(cap->card, MTK_PLATFORM_STR, sizeof(cap->card)); > > > > @@ -788,7 +792,7 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > */ > > if ((ctx->state == MTK_STATE_ABORT) || (ctx->state == MTK_STATE_FREE)) { > > ret = -EIO; > > - goto err_set_param; > > + goto err_start_stream; > > } > > > > /* Do the initialization when both start_streaming have been called */ > > @@ -800,6 +804,12 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > return 0; > > } > > > > + ret = pm_runtime_get_sync(&ctx->dev->plat_dev->dev); > > + if (ret < 0) { > > + mtk_v4l2_err("pm_runtime_get_sync fail %d", ret); > > + goto err_start_stream; > > + } > > + > > mtk_venc_set_param(ctx, ¶m); > > ret = venc_if_set_param(ctx, VENC_SET_PARAM_ENC, ¶m); > > if (ret) { > > @@ -826,6 +836,11 @@ static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count) > > return 0; > > > > err_set_param: > > + ret = pm_runtime_put(&ctx->dev->plat_dev->dev); > > + if (ret < 0) > > + mtk_v4l2_err("pm_runtime_put fail %d", ret); > > + > > +err_start_stream: > > for (i = 0; i < q->num_buffers; ++i) { > > struct vb2_buffer *buf = vb2_get_buffer(q, i); > > > > @@ -879,6 +894,10 @@ static void vb2ops_venc_stop_streaming(struct vb2_queue *q) > > if (ret) > > mtk_v4l2_err("venc_if_deinit failed=%d", ret); > > > > + ret = pm_runtime_put(&ctx->dev->plat_dev->dev); > > + if (ret < 0) > > + mtk_v4l2_err("pm_runtime_put fail %d", ret); > > + > > ctx->state = MTK_STATE_FREE; > > } > > > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > index b8fe408..fe17f0c 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_drv.c > > @@ -49,12 +49,15 @@ > > }, > > }; > > > > -static const struct mtk_video_fmt mtk_video_formats_capture_mt8173[] = { > > +static const struct mtk_video_fmt mtk_video_formats_capture_mt8173_h264[] = { > > { > > .fourcc = V4L2_PIX_FMT_H264, > > .type = MTK_FMT_ENC, > > .num_planes = 1, > > }, > > +}; > > + > > +static const struct mtk_video_fmt mtk_video_formats_capture_mt8173_vp8[] = { > > { > > .fourcc = V4L2_PIX_FMT_VP8, > > .type = MTK_FMT_ENC, > > @@ -110,35 +113,13 @@ static irqreturn_t mtk_vcodec_enc_irq_handler(int irq, void *priv) > > ctx = dev->curr_ctx; > > spin_unlock_irqrestore(&dev->irqlock, flags); > > > > - mtk_v4l2_debug(1, "id=%d", ctx->id); > > - addr = dev->reg_base[VENC_SYS] + MTK_VENC_IRQ_ACK_OFFSET; > > - > > - ctx->irq_status = readl(dev->reg_base[VENC_SYS] + > > - (MTK_VENC_IRQ_STATUS_OFFSET)); > > - > > - clean_irq_status(ctx->irq_status, addr); > > - > > - wake_up_ctx(ctx, MTK_INST_IRQ_RECEIVED); > > - return IRQ_HANDLED; > > -} > > - > > -static irqreturn_t mtk_vcodec_enc_lt_irq_handler(int irq, void *priv) > > -{ > > - struct mtk_vcodec_dev *dev = priv; > > - struct mtk_vcodec_ctx *ctx; > > - unsigned long flags; > > - void __iomem *addr; > > - > > - spin_lock_irqsave(&dev->irqlock, flags); > > - ctx = dev->curr_ctx; > > - spin_unlock_irqrestore(&dev->irqlock, flags); > > + mtk_v4l2_debug(1, "id=%d coreid:%d", ctx->id, dev->venc_pdata->core_id); > > + addr = dev->reg_base[dev->venc_pdata->core_id] + > > + MTK_VENC_IRQ_ACK_OFFSET; > > > > - mtk_v4l2_debug(1, "id=%d", ctx->id); > > - ctx->irq_status = readl(dev->reg_base[VENC_LT_SYS] + > > + ctx->irq_status = readl(dev->reg_base[dev->venc_pdata->core_id] + > > (MTK_VENC_IRQ_STATUS_OFFSET)); > > > > - addr = dev->reg_base[VENC_LT_SYS] + MTK_VENC_IRQ_ACK_OFFSET; > > - > > clean_irq_status(ctx->irq_status, addr); > > > > wake_up_ctx(ctx, MTK_INST_IRQ_RECEIVED); > > @@ -265,7 +246,8 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > struct resource *res; > > phandle rproc_phandle; > > enum mtk_vcodec_fw_type fw_type; > > - int i, j, ret; > > + int ret; > > + void __iomem *reg_base; > > > > dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); > > if (!dev) > > @@ -291,63 +273,39 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > dev->venc_pdata = of_device_get_match_data(&pdev->dev); > > ret = mtk_vcodec_init_enc_pm(dev); > > if (ret < 0) { > > - dev_err(&pdev->dev, "Failed to get mt vcodec clock source!"); > > + dev_err(&pdev->dev, "Failed to get mtk vcodec clock source!"); > > goto err_enc_pm; > > } > > > > - for (i = VENC_SYS, j = 0; i < NUM_MAX_VCODEC_REG_BASE; i++, j++) { > > - res = platform_get_resource(pdev, IORESOURCE_MEM, j); > > - dev->reg_base[i] = devm_ioremap_resource(&pdev->dev, res); > > - if (IS_ERR((__force void *)dev->reg_base[i])) { > > - ret = PTR_ERR((__force void *)dev->reg_base[i]); > > - goto err_res; > > - } > > - mtk_v4l2_debug(2, "reg[%d] base=0x%p", i, dev->reg_base[i]); > > - } > > + pm_runtime_enable(&pdev->dev); > > + > > + snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s", > > + dev->venc_pdata->name); > > > > - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); > > - if (res == NULL) { > > - dev_err(&pdev->dev, "failed to get irq resource"); > > - ret = -ENOENT; > > + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > + reg_base = devm_ioremap_resource(&pdev->dev, res); > > + if (IS_ERR((__force void *)reg_base)) { > > + ret = PTR_ERR((__force void *)reg_base); > > goto err_res; > > } > > + dev->reg_base[dev->venc_pdata->core_id] = reg_base; > > > > dev->enc_irq = platform_get_irq(pdev, 0); > > ret = devm_request_irq(&pdev->dev, dev->enc_irq, > > mtk_vcodec_enc_irq_handler, > > 0, pdev->name, dev); > > if (ret) { > > - dev_err(&pdev->dev, "Failed to install dev->enc_irq %d (%d)", > > - dev->enc_irq, > > - ret); > > + dev_err(&pdev->dev, > > + "Failed to install dev->enc_irq %d (%d) core_id:%d", > > + dev->enc_irq, ret, dev->venc_pdata->core_id); > > ret = -EINVAL; > > goto err_res; > > } > > disable_irq(dev->enc_irq); > > > > - if (dev->venc_pdata->has_lt_irq) { > > - dev->enc_lt_irq = platform_get_irq(pdev, 1); > > - ret = devm_request_irq(&pdev->dev, > > - dev->enc_lt_irq, > > - mtk_vcodec_enc_lt_irq_handler, > > - 0, pdev->name, dev); > > - if (ret) { > > - dev_err(&pdev->dev, > > - "Failed to install dev->enc_lt_irq %d (%d)", > > - dev->enc_lt_irq, ret); > > - ret = -EINVAL; > > - goto err_res; > > - } > > - disable_irq(dev->enc_lt_irq); /* VENC_LT */ > > - } > > - > > mutex_init(&dev->enc_mutex); > > mutex_init(&dev->dev_mutex); > > spin_lock_init(&dev->irqlock); > > - > > - snprintf(dev->v4l2_dev.name, sizeof(dev->v4l2_dev.name), "%s", > > - "[MTK_V4L2_VENC]"); > > - > > ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev); > > if (ret) { > > mtk_v4l2_err("v4l2_device_register err=%d", ret); > > @@ -373,7 +331,7 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > V4L2_CAP_STREAMING; > > > > snprintf(vfd_enc->name, sizeof(vfd_enc->name), "%s", > > - MTK_VCODEC_ENC_NAME); > > + dev->venc_pdata->name); > > video_set_drvdata(vfd_enc, dev); > > dev->vfd_enc = vfd_enc; > > platform_set_drvdata(pdev, dev); > > @@ -401,8 +359,8 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > goto err_enc_reg; > > } > > > > - mtk_v4l2_debug(0, "encoder registered as /dev/video%d", > > - vfd_enc->num); > > + mtk_v4l2_debug(0, "encoder %d registered as /dev/video%d", > > + dev->venc_pdata->core_id, vfd_enc->num); > > > > return 0; > > > > @@ -415,26 +373,39 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > err_enc_alloc: > > v4l2_device_unregister(&dev->v4l2_dev); > > err_res: > > - mtk_vcodec_release_enc_pm(dev); > > + pm_runtime_disable(&pdev->dev); > > err_enc_pm: > > mtk_vcodec_fw_release(dev->fw_handler); > > return ret; > > } > > > > -static const struct mtk_vcodec_enc_pdata mt8173_pdata = { > > +static const struct mtk_vcodec_enc_pdata mt8173_avc_pdata = { > > + .chip = MTK_MT8173, > > + .name = MTK_VCODEC_ENC_NAME, > > + .capture_formats = mtk_video_formats_capture_mt8173_h264, > > + .num_capture_formats = 1, > > + .output_formats = mtk_video_formats_output_mt8173, > > + .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > + .min_bitrate = 1, > > + .max_bitrate = 4000000, > > + .core_id = VENC_SYS, > > +}; > > + > > +static const struct mtk_vcodec_enc_pdata mt8173_vp8_pdata = { > > .chip = MTK_MT8173, > > - .has_lt_irq = true, > > - .capture_formats = mtk_video_formats_capture_mt8173, > > - .num_capture_formats = ARRAY_SIZE(mtk_video_formats_capture_mt8173), > > + .name = MTK_VENC_VP8_NAME, > > + .capture_formats = mtk_video_formats_capture_mt8173_vp8, > > + .num_capture_formats = 1, > > .output_formats = mtk_video_formats_output_mt8173, > > .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > .min_bitrate = 1, > > .max_bitrate = 4000000, > > + .core_id = VENC_LT_SYS, > > }; > > > > static const struct mtk_vcodec_enc_pdata mt8183_pdata = { > > .chip = MTK_MT8183, > > - .has_lt_irq = false, > > + .name = MTK_VCODEC_ENC_NAME, > > .uses_ext = true, > > .capture_formats = mtk_video_formats_capture_mt8183, > > .num_capture_formats = ARRAY_SIZE(mtk_video_formats_capture_mt8183), > > @@ -443,10 +414,14 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > > .num_output_formats = ARRAY_SIZE(mtk_video_formats_output_mt8173), > > .min_bitrate = 64, > > .max_bitrate = 40000000, > > + .core_id = VENC_SYS, > > }; > > > > static const struct of_device_id mtk_vcodec_enc_match[] = { > > - {.compatible = "mediatek,mt8173-vcodec-enc", .data = &mt8173_pdata}, > > + {.compatible = "mediatek,mt8173-vcodec-avc-enc", > > + .data = &mt8173_avc_pdata}, > > + {.compatible = "mediatek,mt8173-vcodec-vp8-enc", > > + .data = &mt8173_vp8_pdata}, > > {.compatible = "mediatek,mt8183-vcodec-enc", .data = &mt8183_pdata}, > > {}, > > }; > > @@ -466,7 +441,7 @@ static int mtk_vcodec_enc_remove(struct platform_device *pdev) > > video_unregister_device(dev->vfd_enc); > > > > v4l2_device_unregister(&dev->v4l2_dev); > > - mtk_vcodec_release_enc_pm(dev); > > + pm_runtime_disable(&pdev->dev); > > mtk_vcodec_fw_release(dev->fw_handler); > > return 0; > > } > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > index ee22902..01c6a55 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c > > @@ -43,21 +43,6 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) > > return -ENODEV; > > } > > pm->larbvenc = &pdev->dev; > > - > > - node = of_parse_phandle(dev->of_node, "mediatek,larb", 1); > > - if (!node) { > > - mtk_v4l2_err("no mediatek,larb found"); > > - return -ENODEV; > > - } > > - > > - pdev = of_find_device_by_node(node); > > - of_node_put(node); > > - if (!pdev) { > > - mtk_v4l2_err("no mediatek,larb device found"); > > - return -ENODEV; > > - } > > - > > - pm->larbvenclt = &pdev->dev; > > pdev = mtkdev->plat_dev; > > pm->dev = &pdev->dev; > > > > @@ -94,11 +79,6 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev) > > return ret; > > } > > > > -void mtk_vcodec_release_enc_pm(struct mtk_vcodec_dev *mtkdev) > > -{ > > -} > > - > > - > > void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm) > > { > > struct mtk_vcodec_clk *enc_clk = &pm->venc_clk; > > @@ -116,18 +96,10 @@ void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm) > > ret = mtk_smi_larb_get(pm->larbvenc); > > if (ret) { > > mtk_v4l2_err("mtk_smi_larb_get larb3 fail %d", ret); > > - goto larbvencerr; > > - } > > - ret = mtk_smi_larb_get(pm->larbvenclt); > > - if (ret) { > > - mtk_v4l2_err("mtk_smi_larb_get larb4 fail %d", ret); > > - goto larbvenclterr; > > + goto clkerr; > > } > > return; > > > > -larbvenclterr: > > - mtk_smi_larb_put(pm->larbvenc); > > -larbvencerr: > > clkerr: > > for (i -= 1; i >= 0; i--) > > clk_disable_unprepare(enc_clk->clk_info[i].vcodec_clk); > > @@ -139,7 +111,6 @@ void mtk_vcodec_enc_clock_off(struct mtk_vcodec_pm *pm) > > int i = 0; > > > > mtk_smi_larb_put(pm->larbvenc); > > - mtk_smi_larb_put(pm->larbvenclt); > > for (i = enc_clk->clk_num - 1; i >= 0; i--) > > clk_disable_unprepare(enc_clk->clk_info[i].vcodec_clk); > > } > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > index b7ecdfd..c1b5986 100644 > > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.h > > @@ -10,7 +10,6 @@ > > #include "mtk_vcodec_drv.h" > > > > int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *dev); > > -void mtk_vcodec_release_enc_pm(struct mtk_vcodec_dev *dev); > > > > void mtk_vcodec_enc_clock_on(struct mtk_vcodec_pm *pm); > > void mtk_vcodec_enc_clock_off(struct mtk_vcodec_pm *pm); > > diff --git a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > index 11abb19..8267a9c 100644 > > --- a/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > +++ b/drivers/media/platform/mtk-vcodec/venc/venc_vp8_if.c > > @@ -367,7 +367,7 @@ static int vp8_enc_encode(void *handle, > > > > mtk_vcodec_debug_enter(inst); > > > > - enable_irq(ctx->dev->enc_lt_irq); > > + enable_irq(ctx->dev->enc_irq); > > > > switch (opt) { > > case VENC_START_OPT_ENCODE_FRAME: > > @@ -386,7 +386,7 @@ static int vp8_enc_encode(void *handle, > > > > encode_err: > > > > - disable_irq(ctx->dev->enc_lt_irq); > > + disable_irq(ctx->dev->enc_irq); > > mtk_vcodec_debug_leave(inst); > > > > return ret; > > _______________________________________________ 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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=ham 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 6D3BBC433E0 for ; Wed, 10 Jun 2020 06:13:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2DA0E20734 for ; Wed, 10 Jun 2020 06:13:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="uaHJqiH0" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726098AbgFJGNf (ORCPT ); Wed, 10 Jun 2020 02:13:35 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:39999 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725988AbgFJGNf (ORCPT ); Wed, 10 Jun 2020 02:13:35 -0400 X-UUID: 51daa1dbcc2c44cb9863eafb0f8e3573-20200610 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=7g39zsjgFbQQQ8ejglrHczGR1a++BpoBzudTSZ8Hps4=; b=uaHJqiH0tLmK/1yN2zNK7KDktu8iP5abxoyUwAHK693KNuJe86clJVd6IqPsHTAUmJUQ1FeInPNlxtyZH4qBVX/e8EaYqsRitNmGqmC0SZ6n/TWqF6Tykq59QwCJ4lNJehG/cDHgKLloy30JMfRSUco3VYJFgUq8aEJKi2sTx6I=; X-UUID: 51daa1dbcc2c44cb9863eafb0f8e3573-20200610 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1217306719; Wed, 10 Jun 2020 14:13:24 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 10 Jun 2020 14:13:21 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 10 Jun 2020 14:13:21 +0800 Message-ID: <1591769602.5047.3.camel@mtksdaap41> Subject: Re: [PATCH v4 08/17] media: mtk-vcodec: separate mtk-vcodec-enc node. From: Tiffany Lin To: CK Hu CC: Yong Wu , Maoguang Meng , Matthias Brugger , Joerg Roedel , Rob Herring , "Will Deacon" , , Irui Wang , Nicolas Boichat , "Evan Green" , , Matthias Kaehlcke , , , , Tomasz Figa , , Hsin-Yi Wang , , , , , , , , Robin Murphy Date: Wed, 10 Jun 2020 14:13:22 +0800 In-Reply-To: <1591767911.527.5.camel@mtksdaap41> References: <1590826218-23653-1-git-send-email-yong.wu@mediatek.com> <1590826218-23653-9-git-send-email-yong.wu@mediatek.com> <1591767911.527.5.camel@mtksdaap41> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 22ADA025ED1332B9CD66379BF85F4C85BC2E639A6CED8FB4692F0EBDB9041AB62000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org T24gV2VkLCAyMDIwLTA2LTEwIGF0IDEzOjQ1ICswODAwLCBDSyBIdSB3cm90ZToNCj4gKyBUaWZm YW55ICYgTWFvZ3VhbmcuDQo+IA0KPiANCj4gT24gU2F0LCAyMDIwLTA1LTMwIGF0IDE2OjEwICsw ODAwLCBZb25nIFd1IHdyb3RlOg0KPiA+IEZyb206IE1hb2d1YW5nIE1lbmcgPG1hb2d1YW5nLm1l bmdAbWVkaWF0ZWsuY29tPg0KPiA+IA0KPiA+IE1USyBIMjY0IEVuY29kZXIoVkVOQ19TWVMpIGFu ZCBWUDggRW5jb2RlcihWRU5DX0xUX1NZUykgYXJlIHR3bw0KPiA+IGluZGVwZW5kZW50IGhhcmR3 YXJlIGluc3RhbmNlLiBUaGV5IGhhdmUgdGhlaXIgb3duZXIgaW50ZXJydXB0LA0KPiA+IHJlZ2lz dGVyIG1hcHBpbmcsIGFuZCBzcGVjaWFsIGNsb2Nrcy4NCj4gPiANCj4gPiBUaGlzIHBhdGNoIHNl cGVyYXRlcyB0aGUgdHdvIGluc3RhbmNlLiBUaGlzIGlzIGEgcHJlcGFyaW5nIHBhdGNoIGZvcg0K PiA+IGFkZGluZyBkZXZpY2VfbGluayBiZXR3ZWVuIHRoZSBsYXJicyBhbmQgdmVuYy1kZXZpY2Uu IEl0J3MgbWFpbmx5IGZvcg0KPiA+IGZpeGluZyB0aGUgcHJvYmxlbToNCj4gPiBodHRwczovL2xr bWwub3JnL2xrbWwvMjAxOS85LzMvMzE2DQo+ID4gDQo+ID4gVXNlciBDYWxsICJWSURJT0NfUVVF UllDQVAiOg0KPiA+IEgyNjQgRW5jb2RlciByZXR1cm4gZHJpdmVyIG5hbWUgIm10ay12Y29kZWMt ZW5jIjsNCj4gPiBWUDggRW5jb2RlciByZXR1cm4gZHJpdmVyIG5hbWUgIm10ay12ZW5jLXZwOC4N Cj4gPiANCg0KQWNrZWQtYnk6IFRpZmZhbnkgTGluIDx0aWZmYW55LmxpbkBtZWRpYXRlay5jb20+ DQoNCg0KPiA+IFNpZ25lZC1vZmYtYnk6IE1hb2d1YW5nIE1lbmcgPG1hb2d1YW5nLm1lbmdAbWVk aWF0ZWsuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEhzaW4tWWkgV2FuZyA8aHNpbnlpQGNocm9t aXVtLm9yZz4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBJcnVpIFdhbmcgPGlydWkud2FuZ0BtZWRpYXRl ay5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9t dGtfdmNvZGVjX2Rydi5oIHwgIDEwICstDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRr LXZjb2RlYy9tdGtfdmNvZGVjX2VuYy5jIHwgIDIzICsrKy0NCj4gPiAgLi4uL21lZGlhL3BsYXRm b3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19lbmNfZHJ2LmMgfCAxMjcgKysrKysrKysrLS0tLS0t LS0tLS0tDQo+ID4gIC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstdmNvZGVjL210a192Y29kZWNfZW5j X3BtLmMgIHwgIDMxICstLS0tDQo+ID4gIC4uLi9tZWRpYS9wbGF0Zm9ybS9tdGstdmNvZGVjL210 a192Y29kZWNfZW5jX3BtLmggIHwgICAxIC0NCj4gPiAgLi4uL21lZGlhL3BsYXRmb3JtL210ay12 Y29kZWMvdmVuYy92ZW5jX3ZwOF9pZi5jICAgfCAgIDQgKy0NCj4gPiAgNiBmaWxlcyBjaGFuZ2Vk LCA4MCBpbnNlcnRpb25zKCspLCAxMTYgZGVsZXRpb25zKC0pDQo+ID4gDQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9tdGtfdmNvZGVjX2Rydi5oIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstdmNvZGVjL210a192Y29kZWNfZHJ2LmgNCj4gPiBp bmRleCBhMjcxNjExNy4uNTJkMWNlMSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19kcnYuaA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9tdGtfdmNvZGVjX2Rydi5oDQo+ID4gQEAgLTE5LDYgKzE5 LDcgQEANCj4gPiAgI2RlZmluZSBNVEtfVkNPREVDX0RSVl9OQU1FCSJtdGtfdmNvZGVjX2RydiIN Cj4gPiAgI2RlZmluZSBNVEtfVkNPREVDX0RFQ19OQU1FCSJtdGstdmNvZGVjLWRlYyINCj4gPiAg I2RlZmluZSBNVEtfVkNPREVDX0VOQ19OQU1FCSJtdGstdmNvZGVjLWVuYyINCj4gPiArI2RlZmlu ZSBNVEtfVkVOQ19WUDhfTkFNRQkibXRrLXZlbmMtdnA4Ig0KPiA+ICAjZGVmaW5lIE1US19QTEFU Rk9STV9TVFIJInBsYXRmb3JtOm10ODE3MyINCj4gPiAgDQo+ID4gICNkZWZpbmUgTVRLX1ZDT0RF Q19NQVhfUExBTkVTCTMNCj4gPiBAQCAtMTkzLDcgKzE5NCw2IEBAIHN0cnVjdCBtdGtfdmNvZGVj X3BtIHsNCj4gPiAgDQo+ID4gIAlzdHJ1Y3QgbXRrX3Zjb2RlY19jbGsJdmVuY19jbGs7DQo+ID4g IAlzdHJ1Y3QgZGV2aWNlCSpsYXJidmVuYzsNCj4gPiAtCXN0cnVjdCBkZXZpY2UJKmxhcmJ2ZW5j bHQ7DQo+ID4gIAlzdHJ1Y3QgZGV2aWNlCSpkZXY7DQo+ID4gIAlzdHJ1Y3QgbXRrX3Zjb2RlY19k ZXYJKm10a2RldjsNCj4gPiAgfTsNCj4gPiBAQCAtMzExLDI1ICszMTEsMjcgQEAgZW51bSBtdGtf Y2hpcCB7DQo+ID4gICAqIEBjaGlwOiBjaGlwIHRoaXMgZW5jb2RlciBpcyBjb21wYXRpYmxlIHdp dGgNCj4gPiAgICoNCj4gPiAgICogQHVzZXNfZXh0OiB3aGV0aGVyIHRoZSBlbmNvZGVyIHVzZXMg dGhlIGV4dGVuZGVkIGZpcm13YXJlIG1lc3NhZ2luZyBmb3JtYXQNCj4gPiAtICogQGhhc19sdF9p cnE6IHdoZXRoZXIgdGhlIGVuY29kZXIgdXNlcyB0aGUgTFQgaXJxDQo+ID4gKyAqIEBuYW1lOiB3 aGV0aGVyIHRoZSBlbmNvZGVyIGNvcmUgaXMgdnA4DQo+ID4gICAqIEBtaW5fYmlyYXRlOiBtaW5p bXVtIHN1cHBvcnRlZCBlbmNvZGluZyBiaXRyYXRlDQo+ID4gICAqIEBtYXhfYml0cmF0ZTogbWF4 aW11bSBzdXBwb3J0ZWQgZW5jb2RpbmcgYml0cmF0ZQ0KPiA+ICAgKiBAY2FwdHVyZV9mb3JtYXRz OiBhcnJheSBvZiBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXRzDQo+ID4gICAqIEBudW1fY2FwdHVy ZV9mb3JtYXRzOiBudW1iZXIgb2YgZW50cmllcyBpbiBjYXB0dXJlX2Zvcm1hdHMNCj4gPiAgICog QG91dHB1dF9mb3JtYXRzOiBhcnJheSBvZiBzdXBwb3J0ZWQgb3V0cHV0IGZvcm1hdHMNCj4gPiAg ICogQG51bV9vdXRwdXRfZm9ybWF0czogbnVtYmVyIG9mIGVudHJpZXMgaW4gb3V0cHV0X2Zvcm1h dHMNCj4gPiArICogQGNvcmVfaWQ6IHN0YW5kIGZvciBoMjY0IG9yIHZwOCBlbmNvZGUgaW5kZXgN Cj4gPiAgICovDQo+ID4gIHN0cnVjdCBtdGtfdmNvZGVjX2VuY19wZGF0YSB7DQo+ID4gIAllbnVt IG10a19jaGlwIGNoaXA7DQo+ID4gIA0KPiA+ICAJYm9vbCB1c2VzX2V4dDsNCj4gPiAtCWJvb2wg aGFzX2x0X2lycTsNCj4gPiArCWNvbnN0IGNoYXIgKm5hbWU7DQo+ID4gIAl1bnNpZ25lZCBsb25n IG1pbl9iaXRyYXRlOw0KPiA+ICAJdW5zaWduZWQgbG9uZyBtYXhfYml0cmF0ZTsNCj4gPiAgCWNv bnN0IHN0cnVjdCBtdGtfdmlkZW9fZm10ICpjYXB0dXJlX2Zvcm1hdHM7DQo+ID4gIAlzaXplX3Qg bnVtX2NhcHR1cmVfZm9ybWF0czsNCj4gPiAgCWNvbnN0IHN0cnVjdCBtdGtfdmlkZW9fZm10ICpv dXRwdXRfZm9ybWF0czsNCj4gPiAgCXNpemVfdCBudW1fb3V0cHV0X2Zvcm1hdHM7DQo+ID4gKwlp bnQgY29yZV9pZDsNCj4gPiAgfTsNCj4gPiAgDQo+ID4gIC8qKg0KPiA+IEBAIC0zNTksNyArMzYx LDYgQEAgc3RydWN0IG10a192Y29kZWNfZW5jX3BkYXRhIHsNCj4gPiAgICoNCj4gPiAgICogQGRl Y19pcnE6IGRlY29kZXIgaXJxIHJlc291cmNlDQo+ID4gICAqIEBlbmNfaXJxOiBoMjY0IGVuY29k ZXIgaXJxIHJlc291cmNlDQo+ID4gLSAqIEBlbmNfbHRfaXJxOiB2cDggZW5jb2RlciBpcnEgcmVz b3VyY2UNCj4gPiAgICoNCj4gPiAgICogQGRlY19tdXRleDogZGVjb2RlciBoYXJkd2FyZSBsb2Nr DQo+ID4gICAqIEBlbmNfbXV0ZXg6IGVuY29kZXIgaGFyZHdhcmUgbG9jay4NCj4gPiBAQCAtMzk1 LDcgKzM5Niw2IEBAIHN0cnVjdCBtdGtfdmNvZGVjX2RldiB7DQo+ID4gIA0KPiA+ICAJaW50IGRl Y19pcnE7DQo+ID4gIAlpbnQgZW5jX2lycTsNCj4gPiAtCWludCBlbmNfbHRfaXJxOw0KPiA+ICAN Cj4gPiAgCXN0cnVjdCBtdXRleCBkZWNfbXV0ZXg7DQo+ID4gIAlzdHJ1Y3QgbXV0ZXggZW5jX211 dGV4Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMv bXRrX3Zjb2RlY19lbmMuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9tdGtf dmNvZGVjX2VuYy5jDQo+ID4gaW5kZXggZjBhZjc4Zi4uNTMwMWRjYSAxMDA2NDQNCj4gPiAtLS0g YS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19lbmMuYw0KPiA+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9tdGtfdmNvZGVjX2VuYy5j DQo+ID4gQEAgLTksNiArOSw3IEBADQo+ID4gICNpbmNsdWRlIDxtZWRpYS92NGwyLW1lbTJtZW0u aD4NCj4gPiAgI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmg+DQo+ID4gICNp bmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50 aW1lLmg+DQo+ID4gIA0KPiA+ICAjaW5jbHVkZSAibXRrX3Zjb2RlY19kcnYuaCINCj4gPiAgI2lu Y2x1ZGUgIm10a192Y29kZWNfZW5jLmgiDQo+ID4gQEAgLTE3NCw3ICsxNzUsMTAgQEAgc3RhdGlj IGludCB2aWRpb2NfZW51bV9mbXRfdmlkX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJp diwNCj4gPiAgc3RhdGljIGludCB2aWRpb2NfdmVuY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmls ZSwgdm9pZCAqcHJpdiwNCj4gPiAgCQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkNCj4g PiAgew0KPiA+IC0Jc3Ryc2NweShjYXAtPmRyaXZlciwgTVRLX1ZDT0RFQ19FTkNfTkFNRSwgc2l6 ZW9mKGNhcC0+ZHJpdmVyKSk7DQo+ID4gKwljb25zdCBzdHJ1Y3QgbXRrX3Zjb2RlY19lbmNfcGRh dGEgKnBkYXRhID0NCj4gPiArCQlmaF90b19jdHgocHJpdiktPmRldi0+dmVuY19wZGF0YTsNCj4g PiArDQo+ID4gKwlzdHJzY3B5KGNhcC0+ZHJpdmVyLCBwZGF0YS0+bmFtZSwgc2l6ZW9mKGNhcC0+ ZHJpdmVyKSk7DQo+ID4gIAlzdHJzY3B5KGNhcC0+YnVzX2luZm8sIE1US19QTEFURk9STV9TVFIs IHNpemVvZihjYXAtPmJ1c19pbmZvKSk7DQo+ID4gIAlzdHJzY3B5KGNhcC0+Y2FyZCwgTVRLX1BM QVRGT1JNX1NUUiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOw0KPiA+ICANCj4gPiBAQCAtNzg4LDcgKzc5 Miw3IEBAIHN0YXRpYyBpbnQgdmIyb3BzX3ZlbmNfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJf cXVldWUgKnEsIHVuc2lnbmVkIGludCBjb3VudCkNCj4gPiAgCSAgKi8NCj4gPiAgCWlmICgoY3R4 LT5zdGF0ZSA9PSBNVEtfU1RBVEVfQUJPUlQpIHx8IChjdHgtPnN0YXRlID09IE1US19TVEFURV9G UkVFKSkgew0KPiA+ICAJCXJldCA9IC1FSU87DQo+ID4gLQkJZ290byBlcnJfc2V0X3BhcmFtOw0K PiA+ICsJCWdvdG8gZXJyX3N0YXJ0X3N0cmVhbTsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gIAkvKiBE byB0aGUgaW5pdGlhbGl6YXRpb24gd2hlbiBib3RoIHN0YXJ0X3N0cmVhbWluZyBoYXZlIGJlZW4g Y2FsbGVkICovDQo+ID4gQEAgLTgwMCw2ICs4MDQsMTIgQEAgc3RhdGljIGludCB2YjJvcHNfdmVu Y19zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IGNvdW50 KQ0KPiA+ICAJCQlyZXR1cm4gMDsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gKwlyZXQgPSBwbV9ydW50 aW1lX2dldF9zeW5jKCZjdHgtPmRldi0+cGxhdF9kZXYtPmRldik7DQo+ID4gKwlpZiAocmV0IDwg MCkgew0KPiA+ICsJCW10a192NGwyX2VycigicG1fcnVudGltZV9nZXRfc3luYyBmYWlsICVkIiwg cmV0KTsNCj4gPiArCQlnb3RvIGVycl9zdGFydF9zdHJlYW07DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICAJbXRrX3ZlbmNfc2V0X3BhcmFtKGN0eCwgJnBhcmFtKTsNCj4gPiAgCXJldCA9IHZlbmNfaWZf c2V0X3BhcmFtKGN0eCwgVkVOQ19TRVRfUEFSQU1fRU5DLCAmcGFyYW0pOw0KPiA+ICAJaWYgKHJl dCkgew0KPiA+IEBAIC04MjYsNiArODM2LDExIEBAIHN0YXRpYyBpbnQgdmIyb3BzX3ZlbmNfc3Rh cnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVuc2lnbmVkIGludCBjb3VudCkNCj4g PiAgCXJldHVybiAwOw0KPiA+ICANCj4gPiAgZXJyX3NldF9wYXJhbToNCj4gPiArCXJldCA9IHBt X3J1bnRpbWVfcHV0KCZjdHgtPmRldi0+cGxhdF9kZXYtPmRldik7DQo+ID4gKwlpZiAocmV0IDwg MCkNCj4gPiArCQltdGtfdjRsMl9lcnIoInBtX3J1bnRpbWVfcHV0IGZhaWwgJWQiLCByZXQpOw0K PiA+ICsNCj4gPiArZXJyX3N0YXJ0X3N0cmVhbToNCj4gPiAgCWZvciAoaSA9IDA7IGkgPCBxLT5u dW1fYnVmZmVyczsgKytpKSB7DQo+ID4gIAkJc3RydWN0IHZiMl9idWZmZXIgKmJ1ZiA9IHZiMl9n ZXRfYnVmZmVyKHEsIGkpOw0KPiA+ICANCj4gPiBAQCAtODc5LDYgKzg5NCwxMCBAQCBzdGF0aWMg dm9pZCB2YjJvcHNfdmVuY19zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQ0KPiA+ ICAJaWYgKHJldCkNCj4gPiAgCQltdGtfdjRsMl9lcnIoInZlbmNfaWZfZGVpbml0IGZhaWxlZD0l ZCIsIHJldCk7DQo+ID4gIA0KPiA+ICsJcmV0ID0gcG1fcnVudGltZV9wdXQoJmN0eC0+ZGV2LT5w bGF0X2Rldi0+ZGV2KTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCW10a192NGwyX2Vycigi cG1fcnVudGltZV9wdXQgZmFpbCAlZCIsIHJldCk7DQo+ID4gKw0KPiA+ICAJY3R4LT5zdGF0ZSA9 IE1US19TVEFURV9GUkVFOw0KPiA+ICB9DQo+ID4gIA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19lbmNfZHJ2LmMgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19lbmNfZHJ2LmMNCj4gPiBpbmRl eCBiOGZlNDA4Li5mZTE3ZjBjIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vbXRrLXZjb2RlYy9tdGtfdmNvZGVjX2VuY19kcnYuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9tdGtfdmNvZGVjX2VuY19kcnYuYw0KPiA+IEBAIC00OSwx MiArNDksMTUgQEANCj4gPiAgCX0sDQo+ID4gIH07DQo+ID4gIA0KPiA+IC1zdGF0aWMgY29uc3Qg c3RydWN0IG10a192aWRlb19mbXQgbXRrX3ZpZGVvX2Zvcm1hdHNfY2FwdHVyZV9tdDgxNzNbXSA9 ICB7DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3ZpZGVvX2ZtdCBtdGtfdmlkZW9fZm9y bWF0c19jYXB0dXJlX210ODE3M19oMjY0W10gPSAgew0KPiA+ICAJew0KPiA+ICAJCS5mb3VyY2Mg PSBWNEwyX1BJWF9GTVRfSDI2NCwNCj4gPiAgCQkudHlwZSA9IE1US19GTVRfRU5DLA0KPiA+ICAJ CS5udW1fcGxhbmVzID0gMSwNCj4gPiAgCX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IG10a192aWRlb19mbXQgbXRrX3ZpZGVvX2Zvcm1hdHNfY2FwdHVyZV9tdDgx NzNfdnA4W10gPSAgew0KPiA+ICAJew0KPiA+ICAJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfVlA4 LA0KPiA+ICAJCS50eXBlID0gTVRLX0ZNVF9FTkMsDQo+ID4gQEAgLTExMCwzNSArMTEzLDEzIEBA IHN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfdmNvZGVjX2VuY19pcnFfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICpwcml2KQ0KPiA+ICAJY3R4ID0gZGV2LT5jdXJyX2N0eDsNCj4gPiAgCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmRldi0+aXJxbG9jaywgZmxhZ3MpOw0KPiA+ICANCj4gPiAtCW10a192NGwy X2RlYnVnKDEsICJpZD0lZCIsIGN0eC0+aWQpOw0KPiA+IC0JYWRkciA9IGRldi0+cmVnX2Jhc2Vb VkVOQ19TWVNdICsgTVRLX1ZFTkNfSVJRX0FDS19PRkZTRVQ7DQo+ID4gLQ0KPiA+IC0JY3R4LT5p cnFfc3RhdHVzID0gcmVhZGwoZGV2LT5yZWdfYmFzZVtWRU5DX1NZU10gKw0KPiA+IC0JCQkJKE1U S19WRU5DX0lSUV9TVEFUVVNfT0ZGU0VUKSk7DQo+ID4gLQ0KPiA+IC0JY2xlYW5faXJxX3N0YXR1 cyhjdHgtPmlycV9zdGF0dXMsIGFkZHIpOw0KPiA+IC0NCj4gPiAtCXdha2VfdXBfY3R4KGN0eCwg TVRLX0lOU1RfSVJRX1JFQ0VJVkVEKTsNCj4gPiAtCXJldHVybiBJUlFfSEFORExFRDsNCj4gPiAt fQ0KPiA+IC0NCj4gPiAtc3RhdGljIGlycXJldHVybl90IG10a192Y29kZWNfZW5jX2x0X2lycV9o YW5kbGVyKGludCBpcnEsIHZvaWQgKnByaXYpDQo+ID4gLXsNCj4gPiAtCXN0cnVjdCBtdGtfdmNv ZGVjX2RldiAqZGV2ID0gcHJpdjsNCj4gPiAtCXN0cnVjdCBtdGtfdmNvZGVjX2N0eCAqY3R4Ow0K PiA+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiAtCXZvaWQgX19pb21lbSAqYWRkcjsNCj4g PiAtDQo+ID4gLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5pcnFsb2NrLCBmbGFncyk7DQo+ID4g LQljdHggPSBkZXYtPmN1cnJfY3R4Ow0KPiA+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2 LT5pcnFsb2NrLCBmbGFncyk7DQo+ID4gKwltdGtfdjRsMl9kZWJ1ZygxLCAiaWQ9JWQgY29yZWlk OiVkIiwgY3R4LT5pZCwgZGV2LT52ZW5jX3BkYXRhLT5jb3JlX2lkKTsNCj4gPiArCWFkZHIgPSBk ZXYtPnJlZ19iYXNlW2Rldi0+dmVuY19wZGF0YS0+Y29yZV9pZF0gKw0KPiA+ICsJCQkJTVRLX1ZF TkNfSVJRX0FDS19PRkZTRVQ7DQo+ID4gIA0KPiA+IC0JbXRrX3Y0bDJfZGVidWcoMSwgImlkPSVk IiwgY3R4LT5pZCk7DQo+ID4gLQljdHgtPmlycV9zdGF0dXMgPSByZWFkbChkZXYtPnJlZ19iYXNl W1ZFTkNfTFRfU1lTXSArDQo+ID4gKwljdHgtPmlycV9zdGF0dXMgPSByZWFkbChkZXYtPnJlZ19i YXNlW2Rldi0+dmVuY19wZGF0YS0+Y29yZV9pZF0gKw0KPiA+ICAJCQkJKE1US19WRU5DX0lSUV9T VEFUVVNfT0ZGU0VUKSk7DQo+ID4gIA0KPiA+IC0JYWRkciA9IGRldi0+cmVnX2Jhc2VbVkVOQ19M VF9TWVNdICsgTVRLX1ZFTkNfSVJRX0FDS19PRkZTRVQ7DQo+ID4gLQ0KPiA+ICAJY2xlYW5faXJx X3N0YXR1cyhjdHgtPmlycV9zdGF0dXMsIGFkZHIpOw0KPiA+ICANCj4gPiAgCXdha2VfdXBfY3R4 KGN0eCwgTVRLX0lOU1RfSVJRX1JFQ0VJVkVEKTsNCj4gPiBAQCAtMjY1LDcgKzI0Niw4IEBAIHN0 YXRpYyBpbnQgbXRrX3Zjb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K PiA+ICAJc3RydWN0IHJlc291cmNlICpyZXM7DQo+ID4gIAlwaGFuZGxlIHJwcm9jX3BoYW5kbGU7 DQo+ID4gIAllbnVtIG10a192Y29kZWNfZndfdHlwZSBmd190eXBlOw0KPiA+IC0JaW50IGksIGos IHJldDsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOw0KPiA+ ICANCj4gPiAgCWRldiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRldiksIEdG UF9LRVJORUwpOw0KPiA+ICAJaWYgKCFkZXYpDQo+ID4gQEAgLTI5MSw2MyArMjczLDM5IEBAIHN0 YXRpYyBpbnQgbXRrX3Zjb2RlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K PiA+ICAJZGV2LT52ZW5jX3BkYXRhID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5k ZXYpOw0KPiA+ICAJcmV0ID0gbXRrX3Zjb2RlY19pbml0X2VuY19wbShkZXYpOw0KPiA+ICAJaWYg KHJldCA8IDApIHsNCj4gPiAtCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IG10 IHZjb2RlYyBjbG9jayBzb3VyY2UhIik7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGdldCBtdGsgdmNvZGVjIGNsb2NrIHNvdXJjZSEiKTsNCj4gPiAgCQlnb3RvIGVycl9l bmNfcG07DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0JZm9yIChpID0gVkVOQ19TWVMsIGogPSAwOyBp IDwgTlVNX01BWF9WQ09ERUNfUkVHX0JBU0U7IGkrKywgaisrKSB7DQo+ID4gLQkJcmVzID0gcGxh dGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBqKTsNCj4gPiAtCQlkZXYt PnJlZ19iYXNlW2ldID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7DQo+ ID4gLQkJaWYgKElTX0VSUigoX19mb3JjZSB2b2lkICopZGV2LT5yZWdfYmFzZVtpXSkpIHsNCj4g PiAtCQkJcmV0ID0gUFRSX0VSUigoX19mb3JjZSB2b2lkICopZGV2LT5yZWdfYmFzZVtpXSk7DQo+ ID4gLQkJCWdvdG8gZXJyX3JlczsNCj4gPiAtCQl9DQo+ID4gLQkJbXRrX3Y0bDJfZGVidWcoMiwg InJlZ1slZF0gYmFzZT0weCVwIiwgaSwgZGV2LT5yZWdfYmFzZVtpXSk7DQo+ID4gLQl9DQo+ID4g KwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsNCj4gPiArDQo+ID4gKwlzbnByaW50Zihk ZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihkZXYtPnY0bDJfZGV2Lm5hbWUpLCAiJXMiLA0KPiA+ ICsJCSBkZXYtPnZlbmNfcGRhdGEtPm5hbWUpOw0KPiA+ICANCj4gPiAtCXJlcyA9IHBsYXRmb3Jt X2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7DQo+ID4gLQlpZiAocmVzID09 IE5VTEwpIHsNCj4gPiAtCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGlycSBy ZXNvdXJjZSIpOw0KPiA+IC0JCXJldCA9IC1FTk9FTlQ7DQo+ID4gKwlyZXMgPSBwbGF0Zm9ybV9n ZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KPiA+ICsJcmVnX2Jhc2UgPSBk ZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsNCj4gPiArCWlmIChJU19FUlIo KF9fZm9yY2Ugdm9pZCAqKXJlZ19iYXNlKSkgew0KPiA+ICsJCXJldCA9IFBUUl9FUlIoKF9fZm9y Y2Ugdm9pZCAqKXJlZ19iYXNlKTsNCj4gPiAgCQlnb3RvIGVycl9yZXM7DQo+ID4gIAl9DQo+ID4g KwlkZXYtPnJlZ19iYXNlW2Rldi0+dmVuY19wZGF0YS0+Y29yZV9pZF0gPSByZWdfYmFzZTsNCj4g PiAgDQo+ID4gIAlkZXYtPmVuY19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiA+ ICAJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBkZXYtPmVuY19pcnEsDQo+ID4g IAkJCSAgICAgICBtdGtfdmNvZGVjX2VuY19pcnFfaGFuZGxlciwNCj4gPiAgCQkJICAgICAgIDAs IHBkZXYtPm5hbWUsIGRldik7DQo+ID4gIAlpZiAocmV0KSB7DQo+ID4gLQkJZGV2X2VycigmcGRl di0+ZGV2LCAiRmFpbGVkIHRvIGluc3RhbGwgZGV2LT5lbmNfaXJxICVkICglZCkiLA0KPiA+IC0J CQlkZXYtPmVuY19pcnEsDQo+ID4gLQkJCXJldCk7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2 LA0KPiA+ICsJCQkiRmFpbGVkIHRvIGluc3RhbGwgZGV2LT5lbmNfaXJxICVkICglZCkgY29yZV9p ZDolZCIsDQo+ID4gKwkJCWRldi0+ZW5jX2lycSwgcmV0LCBkZXYtPnZlbmNfcGRhdGEtPmNvcmVf aWQpOw0KPiA+ICAJCXJldCA9IC1FSU5WQUw7DQo+ID4gIAkJZ290byBlcnJfcmVzOw0KPiA+ICAJ fQ0KPiA+ICAJZGlzYWJsZV9pcnEoZGV2LT5lbmNfaXJxKTsNCj4gPiAgDQo+ID4gLQlpZiAoZGV2 LT52ZW5jX3BkYXRhLT5oYXNfbHRfaXJxKSB7DQo+ID4gLQkJZGV2LT5lbmNfbHRfaXJxID0gcGxh dGZvcm1fZ2V0X2lycShwZGV2LCAxKTsNCj4gPiAtCQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZw ZGV2LT5kZXYsDQo+ID4gLQkJCQkgICAgICAgZGV2LT5lbmNfbHRfaXJxLA0KPiA+IC0JCQkJICAg ICAgIG10a192Y29kZWNfZW5jX2x0X2lycV9oYW5kbGVyLA0KPiA+IC0JCQkJICAgICAgIDAsIHBk ZXYtPm5hbWUsIGRldik7DQo+ID4gLQkJaWYgKHJldCkgew0KPiA+IC0JCQlkZXZfZXJyKCZwZGV2 LT5kZXYsDQo+ID4gLQkJCQkiRmFpbGVkIHRvIGluc3RhbGwgZGV2LT5lbmNfbHRfaXJxICVkICgl ZCkiLA0KPiA+IC0JCQkJZGV2LT5lbmNfbHRfaXJxLCByZXQpOw0KPiA+IC0JCQlyZXQgPSAtRUlO VkFMOw0KPiA+IC0JCQlnb3RvIGVycl9yZXM7DQo+ID4gLQkJfQ0KPiA+IC0JCWRpc2FibGVfaXJx KGRldi0+ZW5jX2x0X2lycSk7IC8qIFZFTkNfTFQgKi8NCj4gPiAtCX0NCj4gPiAtDQo+ID4gIAlt dXRleF9pbml0KCZkZXYtPmVuY19tdXRleCk7DQo+ID4gIAltdXRleF9pbml0KCZkZXYtPmRldl9t dXRleCk7DQo+ID4gIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5pcnFsb2NrKTsNCj4gPiAtDQo+ID4g LQlzbnByaW50ZihkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihkZXYtPnY0bDJfZGV2Lm5hbWUp LCAiJXMiLA0KPiA+IC0JCSAiW01US19WNEwyX1ZFTkNdIik7DQo+ID4gLQ0KPiA+ICAJcmV0ID0g djRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmRldi0+djRsMl9kZXYpOw0KPiA+ICAJ aWYgKHJldCkgew0KPiA+ICAJCW10a192NGwyX2VycigidjRsMl9kZXZpY2VfcmVnaXN0ZXIgZXJy PSVkIiwgcmV0KTsNCj4gPiBAQCAtMzczLDcgKzMzMSw3IEBAIHN0YXRpYyBpbnQgbXRrX3Zjb2Rl Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJCQkJCVY0TDJfQ0FQ X1NUUkVBTUlORzsNCj4gPiAgDQo+ID4gIAlzbnByaW50Zih2ZmRfZW5jLT5uYW1lLCBzaXplb2Yo dmZkX2VuYy0+bmFtZSksICIlcyIsDQo+ID4gLQkJIE1US19WQ09ERUNfRU5DX05BTUUpOw0KPiA+ ICsJCQlkZXYtPnZlbmNfcGRhdGEtPm5hbWUpOw0KPiA+ICAJdmlkZW9fc2V0X2RydmRhdGEodmZk X2VuYywgZGV2KTsNCj4gPiAgCWRldi0+dmZkX2VuYyA9IHZmZF9lbmM7DQo+ID4gIAlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOw0KPiA+IEBAIC00MDEsOCArMzU5LDggQEAgc3RhdGlj IGludCBtdGtfdmNvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4g IAkJZ290byBlcnJfZW5jX3JlZzsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gLQltdGtfdjRsMl9kZWJ1 ZygwLCAiZW5jb2RlciByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZCIsDQo+ID4gLQkJCXZmZF9l bmMtPm51bSk7DQo+ID4gKwltdGtfdjRsMl9kZWJ1ZygwLCAiZW5jb2RlciAlZCByZWdpc3RlcmVk IGFzIC9kZXYvdmlkZW8lZCIsDQo+ID4gKwkJICAgICAgIGRldi0+dmVuY19wZGF0YS0+Y29yZV9p ZCwgdmZkX2VuYy0+bnVtKTsNCj4gPiAgDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgDQo+ID4gQEAg LTQxNSwyNiArMzczLDM5IEBAIHN0YXRpYyBpbnQgbXRrX3Zjb2RlY19wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICBlcnJfZW5jX2FsbG9jOg0KPiA+ICAJdjRsMl9kZXZp Y2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7DQo+ID4gIGVycl9yZXM6DQo+ID4gLQltdGtf dmNvZGVjX3JlbGVhc2VfZW5jX3BtKGRldik7DQo+ID4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBk ZXYtPmRldik7DQo+ID4gIGVycl9lbmNfcG06DQo+ID4gIAltdGtfdmNvZGVjX2Z3X3JlbGVhc2Uo ZGV2LT5md19oYW5kbGVyKTsNCj4gPiAgCXJldHVybiByZXQ7DQo+ID4gIH0NCj4gPiAgDQo+ID4g LXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Zjb2RlY19lbmNfcGRhdGEgbXQ4MTczX3BkYXRhID0g ew0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG10a192Y29kZWNfZW5jX3BkYXRhIG10ODE3M19h dmNfcGRhdGEgPSB7DQo+ID4gKwkuY2hpcCA9IE1US19NVDgxNzMsDQo+ID4gKwkubmFtZSA9IE1U S19WQ09ERUNfRU5DX05BTUUsDQo+ID4gKwkuY2FwdHVyZV9mb3JtYXRzID0gbXRrX3ZpZGVvX2Zv cm1hdHNfY2FwdHVyZV9tdDgxNzNfaDI2NCwNCj4gPiArCS5udW1fY2FwdHVyZV9mb3JtYXRzID0g MSwNCj4gPiArCS5vdXRwdXRfZm9ybWF0cyA9IG10a192aWRlb19mb3JtYXRzX291dHB1dF9tdDgx NzMsDQo+ID4gKwkubnVtX291dHB1dF9mb3JtYXRzID0gQVJSQVlfU0laRShtdGtfdmlkZW9fZm9y bWF0c19vdXRwdXRfbXQ4MTczKSwNCj4gPiArCS5taW5fYml0cmF0ZSA9IDEsDQo+ID4gKwkubWF4 X2JpdHJhdGUgPSA0MDAwMDAwLA0KPiA+ICsJLmNvcmVfaWQgPSBWRU5DX1NZUywNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Zjb2RlY19lbmNfcGRhdGEgbXQ4 MTczX3ZwOF9wZGF0YSA9IHsNCj4gPiAgCS5jaGlwID0gTVRLX01UODE3MywNCj4gPiAtCS5oYXNf bHRfaXJxID0gdHJ1ZSwNCj4gPiAtCS5jYXB0dXJlX2Zvcm1hdHMgPSBtdGtfdmlkZW9fZm9ybWF0 c19jYXB0dXJlX210ODE3MywNCj4gPiAtCS5udW1fY2FwdHVyZV9mb3JtYXRzID0gQVJSQVlfU0la RShtdGtfdmlkZW9fZm9ybWF0c19jYXB0dXJlX210ODE3MyksDQo+ID4gKwkubmFtZSA9IE1US19W RU5DX1ZQOF9OQU1FLA0KPiA+ICsJLmNhcHR1cmVfZm9ybWF0cyA9IG10a192aWRlb19mb3JtYXRz X2NhcHR1cmVfbXQ4MTczX3ZwOCwNCj4gPiArCS5udW1fY2FwdHVyZV9mb3JtYXRzID0gMSwNCj4g PiAgCS5vdXRwdXRfZm9ybWF0cyA9IG10a192aWRlb19mb3JtYXRzX291dHB1dF9tdDgxNzMsDQo+ ID4gIAkubnVtX291dHB1dF9mb3JtYXRzID0gQVJSQVlfU0laRShtdGtfdmlkZW9fZm9ybWF0c19v dXRwdXRfbXQ4MTczKSwNCj4gPiAgCS5taW5fYml0cmF0ZSA9IDEsDQo+ID4gIAkubWF4X2JpdHJh dGUgPSA0MDAwMDAwLA0KPiA+ICsJLmNvcmVfaWQgPSBWRU5DX0xUX1NZUywNCj4gPiAgfTsNCj4g PiAgDQo+ID4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Zjb2RlY19lbmNfcGRhdGEgbXQ4MTgz X3BkYXRhID0gew0KPiA+ICAJLmNoaXAgPSBNVEtfTVQ4MTgzLA0KPiA+IC0JLmhhc19sdF9pcnEg PSBmYWxzZSwNCj4gPiArCS5uYW1lID0gTVRLX1ZDT0RFQ19FTkNfTkFNRSwNCj4gPiAgCS51c2Vz X2V4dCA9IHRydWUsDQo+ID4gIAkuY2FwdHVyZV9mb3JtYXRzID0gbXRrX3ZpZGVvX2Zvcm1hdHNf Y2FwdHVyZV9tdDgxODMsDQo+ID4gIAkubnVtX2NhcHR1cmVfZm9ybWF0cyA9IEFSUkFZX1NJWkUo bXRrX3ZpZGVvX2Zvcm1hdHNfY2FwdHVyZV9tdDgxODMpLA0KPiA+IEBAIC00NDMsMTAgKzQxNCwx NCBAQCBzdGF0aWMgaW50IG10a192Y29kZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikNCj4gPiAgCS5udW1fb3V0cHV0X2Zvcm1hdHMgPSBBUlJBWV9TSVpFKG10a192aWRlb19m b3JtYXRzX291dHB1dF9tdDgxNzMpLA0KPiA+ICAJLm1pbl9iaXRyYXRlID0gNjQsDQo+ID4gIAku bWF4X2JpdHJhdGUgPSA0MDAwMDAwMCwNCj4gPiArCS5jb3JlX2lkID0gVkVOQ19TWVMsDQo+ID4g IH07DQo+ID4gIA0KPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfdmNv ZGVjX2VuY19tYXRjaFtdID0gew0KPiA+IC0Jey5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3 My12Y29kZWMtZW5jIiwgLmRhdGEgPSAmbXQ4MTczX3BkYXRhfSwNCj4gPiArCXsuY29tcGF0aWJs ZSA9ICJtZWRpYXRlayxtdDgxNzMtdmNvZGVjLWF2Yy1lbmMiLA0KPiA+ICsJCQkuZGF0YSA9ICZt dDgxNzNfYXZjX3BkYXRhfSwNCj4gPiArCXsuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt dmNvZGVjLXZwOC1lbmMiLA0KPiA+ICsJCQkuZGF0YSA9ICZtdDgxNzNfdnA4X3BkYXRhfSwNCj4g PiAgCXsuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtdmNvZGVjLWVuYyIsIC5kYXRhID0g Jm10ODE4M19wZGF0YX0sDQo+ID4gIAl7fSwNCj4gPiAgfTsNCj4gPiBAQCAtNDY2LDcgKzQ0MSw3 IEBAIHN0YXRpYyBpbnQgbXRrX3Zjb2RlY19lbmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpDQo+ID4gIAkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZmRfZW5jKTsN Cj4gPiAgDQo+ID4gIAl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsNCj4g PiAtCW10a192Y29kZWNfcmVsZWFzZV9lbmNfcG0oZGV2KTsNCj4gPiArCXBtX3J1bnRpbWVfZGlz YWJsZSgmcGRldi0+ZGV2KTsNCj4gPiAgCW10a192Y29kZWNfZndfcmVsZWFzZShkZXYtPmZ3X2hh bmRsZXIpOw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9tdGstdmNvZGVjL210a192Y29kZWNfZW5jX3BtLmMgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19lbmNfcG0uYw0KPiA+IGluZGV4 IGVlMjI5MDIuLjAxYzZhNTUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9tdGstdmNvZGVjL210a192Y29kZWNfZW5jX3BtLmMNCj4gPiArKysgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19lbmNfcG0uYw0KPiA+IEBAIC00MywyMSAr NDMsNiBAQCBpbnQgbXRrX3Zjb2RlY19pbml0X2VuY19wbShzdHJ1Y3QgbXRrX3Zjb2RlY19kZXYg Km10a2RldikNCj4gPiAgCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiAgCX0NCj4gPiAgCXBtLT5sYXJi dmVuYyA9ICZwZGV2LT5kZXY7DQo+ID4gLQ0KPiA+IC0Jbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUo ZGV2LT5vZl9ub2RlLCAibWVkaWF0ZWssbGFyYiIsIDEpOw0KPiA+IC0JaWYgKCFub2RlKSB7DQo+ ID4gLQkJbXRrX3Y0bDJfZXJyKCJubyBtZWRpYXRlayxsYXJiIGZvdW5kIik7DQo+ID4gLQkJcmV0 dXJuIC1FTk9ERVY7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JcGRldiA9IG9mX2ZpbmRfZGV2aWNl X2J5X25vZGUobm9kZSk7DQo+ID4gLQlvZl9ub2RlX3B1dChub2RlKTsNCj4gPiAtCWlmICghcGRl dikgew0KPiA+IC0JCW10a192NGwyX2Vycigibm8gbWVkaWF0ZWssbGFyYiBkZXZpY2UgZm91bmQi KTsNCj4gPiAtCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlwbS0+bGFy YnZlbmNsdCA9ICZwZGV2LT5kZXY7DQo+ID4gIAlwZGV2ID0gbXRrZGV2LT5wbGF0X2RldjsNCj4g PiAgCXBtLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICANCj4gPiBAQCAtOTQsMTEgKzc5LDYgQEAg aW50IG10a192Y29kZWNfaW5pdF9lbmNfcG0oc3RydWN0IG10a192Y29kZWNfZGV2ICptdGtkZXYp DQo+ID4gIAlyZXR1cm4gcmV0Ow0KPiA+ICB9DQo+ID4gIA0KPiA+IC12b2lkIG10a192Y29kZWNf cmVsZWFzZV9lbmNfcG0oc3RydWN0IG10a192Y29kZWNfZGV2ICptdGtkZXYpDQo+ID4gLXsNCj4g PiAtfQ0KPiA+IC0NCj4gPiAtDQo+ID4gIHZvaWQgbXRrX3Zjb2RlY19lbmNfY2xvY2tfb24oc3Ry dWN0IG10a192Y29kZWNfcG0gKnBtKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgbXRrX3Zjb2RlY19j bGsgKmVuY19jbGsgPSAmcG0tPnZlbmNfY2xrOw0KPiA+IEBAIC0xMTYsMTggKzk2LDEwIEBAIHZv aWQgbXRrX3Zjb2RlY19lbmNfY2xvY2tfb24oc3RydWN0IG10a192Y29kZWNfcG0gKnBtKQ0KPiA+ ICAJcmV0ID0gbXRrX3NtaV9sYXJiX2dldChwbS0+bGFyYnZlbmMpOw0KPiA+ICAJaWYgKHJldCkg ew0KPiA+ICAJCW10a192NGwyX2VycigibXRrX3NtaV9sYXJiX2dldCBsYXJiMyBmYWlsICVkIiwg cmV0KTsNCj4gPiAtCQlnb3RvIGxhcmJ2ZW5jZXJyOw0KPiA+IC0JfQ0KPiA+IC0JcmV0ID0gbXRr X3NtaV9sYXJiX2dldChwbS0+bGFyYnZlbmNsdCk7DQo+ID4gLQlpZiAocmV0KSB7DQo+ID4gLQkJ bXRrX3Y0bDJfZXJyKCJtdGtfc21pX2xhcmJfZ2V0IGxhcmI0IGZhaWwgJWQiLCByZXQpOw0KPiA+ IC0JCWdvdG8gbGFyYnZlbmNsdGVycjsNCj4gPiArCQlnb3RvIGNsa2VycjsNCj4gPiAgCX0NCj4g PiAgCXJldHVybjsNCj4gPiAgDQo+ID4gLWxhcmJ2ZW5jbHRlcnI6DQo+ID4gLQltdGtfc21pX2xh cmJfcHV0KHBtLT5sYXJidmVuYyk7DQo+ID4gLWxhcmJ2ZW5jZXJyOg0KPiA+ICBjbGtlcnI6DQo+ ID4gIAlmb3IgKGkgLT0gMTsgaSA+PSAwOyBpLS0pDQo+ID4gIAkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGVuY19jbGstPmNsa19pbmZvW2ldLnZjb2RlY19jbGspOw0KPiA+IEBAIC0xMzksNyArMTEx LDYgQEAgdm9pZCBtdGtfdmNvZGVjX2VuY19jbG9ja19vZmYoc3RydWN0IG10a192Y29kZWNfcG0g KnBtKQ0KPiA+ICAJaW50IGkgPSAwOw0KPiA+ICANCj4gPiAgCW10a19zbWlfbGFyYl9wdXQocG0t PmxhcmJ2ZW5jKTsNCj4gPiAtCW10a19zbWlfbGFyYl9wdXQocG0tPmxhcmJ2ZW5jbHQpOw0KPiA+ ICAJZm9yIChpID0gZW5jX2Nsay0+Y2xrX251bSAtIDE7IGkgPj0gMDsgaS0tKQ0KPiA+ICAJCWNs a19kaXNhYmxlX3VucHJlcGFyZShlbmNfY2xrLT5jbGtfaW5mb1tpXS52Y29kZWNfY2xrKTsNCj4g PiAgfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMv bXRrX3Zjb2RlY19lbmNfcG0uaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9t dGtfdmNvZGVjX2VuY19wbS5oDQo+ID4gaW5kZXggYjdlY2RmZC4uYzFiNTk4NiAxMDA2NDQNCj4g PiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMvbXRrX3Zjb2RlY19lbmNf cG0uaA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2RlYy9tdGtfdmNv ZGVjX2VuY19wbS5oDQo+ID4gQEAgLTEwLDcgKzEwLDYgQEANCj4gPiAgI2luY2x1ZGUgIm10a192 Y29kZWNfZHJ2LmgiDQo+ID4gIA0KPiA+ICBpbnQgbXRrX3Zjb2RlY19pbml0X2VuY19wbShzdHJ1 Y3QgbXRrX3Zjb2RlY19kZXYgKmRldik7DQo+ID4gLXZvaWQgbXRrX3Zjb2RlY19yZWxlYXNlX2Vu Y19wbShzdHJ1Y3QgbXRrX3Zjb2RlY19kZXYgKmRldik7DQo+ID4gIA0KPiA+ICB2b2lkIG10a192 Y29kZWNfZW5jX2Nsb2NrX29uKHN0cnVjdCBtdGtfdmNvZGVjX3BtICpwbSk7DQo+ID4gIHZvaWQg bXRrX3Zjb2RlY19lbmNfY2xvY2tfb2ZmKHN0cnVjdCBtdGtfdmNvZGVjX3BtICpwbSk7DQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbXRrLXZjb2RlYy92ZW5jL3ZlbmNf dnA4X2lmLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMvdmVuYy92ZW5jX3Zw OF9pZi5jDQo+ID4gaW5kZXggMTFhYmIxOS4uODI2N2E5YyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL210ay12Y29kZWMvdmVuYy92ZW5jX3ZwOF9pZi5jDQo+ID4gKysr IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tdGstdmNvZGVjL3ZlbmMvdmVuY192cDhfaWYuYw0K PiA+IEBAIC0zNjcsNyArMzY3LDcgQEAgc3RhdGljIGludCB2cDhfZW5jX2VuY29kZSh2b2lkICpo YW5kbGUsDQo+ID4gIA0KPiA+ICAJbXRrX3Zjb2RlY19kZWJ1Z19lbnRlcihpbnN0KTsNCj4gPiAg DQo+ID4gLQllbmFibGVfaXJxKGN0eC0+ZGV2LT5lbmNfbHRfaXJxKTsNCj4gPiArCWVuYWJsZV9p cnEoY3R4LT5kZXYtPmVuY19pcnEpOw0KPiA+ICANCj4gPiAgCXN3aXRjaCAob3B0KSB7DQo+ID4g IAljYXNlIFZFTkNfU1RBUlRfT1BUX0VOQ09ERV9GUkFNRToNCj4gPiBAQCAtMzg2LDcgKzM4Niw3 IEBAIHN0YXRpYyBpbnQgdnA4X2VuY19lbmNvZGUodm9pZCAqaGFuZGxlLA0KPiA+ICANCj4gPiAg ZW5jb2RlX2VycjoNCj4gPiAgDQo+ID4gLQlkaXNhYmxlX2lycShjdHgtPmRldi0+ZW5jX2x0X2ly cSk7DQo+ID4gKwlkaXNhYmxlX2lycShjdHgtPmRldi0+ZW5jX2lycSk7DQo+ID4gIAltdGtfdmNv ZGVjX2RlYnVnX2xlYXZlKGluc3QpOw0KPiA+ICANCj4gPiAgCXJldHVybiByZXQ7DQo+IA0KPiAN Cg0K