Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3556425pxv; Mon, 19 Jul 2021 03:12:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzb8VS65ZUPPue+0nG+mKM3ycTNICMxIw0omRXzk2CgrycfSCZpz01H14nNFIHSxVnE+dCF X-Received: by 2002:a05:6402:30af:: with SMTP id df15mr34038294edb.19.1626689565775; Mon, 19 Jul 2021 03:12:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626689565; cv=none; d=google.com; s=arc-20160816; b=0zem5iD/CPc93KZdffFGeweUNQ/tkBGWrEBks65t2cf5VZc2VYTot1OO5Mvfdxu/Bz EDVuQ5agGRYbRzCMUNSibIQL7aM1D5nW/b/lZqxryY1Le5qpROLgonp/9olFuPefEQL+ U30ghYQSgIw9/4Yb789iaaCSdUn6a7KS7zOKMsYxeXoeNApGaNCWQX834QMwxmlYrJij WIBue7Nhqz+Dr/1kJitN0YihMkRoMhyk4k/k9/poKp3Lkahh/XH3mxOHDi82Z3Ow1iba Q1pR3cFizkGwj9hZSAhYJP+MRpQWSgira8Xnru5bvQmaw7tXxCS2QYKaNlbZPNijZyHp qPNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=kBKaq6jdlJbxrW/dv29Lc4Xl7/DqhGsfcizl8fF/zfQ=; b=O9YKxYpA85xHRMcSS5gi0RV2XQ52BtY+brgo05yMcWSo1XkBHTUlz29Pzj4Y3m1vTM 2tL5z5k6R5x2V+LMUgEK+pzvgVIbSzsFa8rSzkJcHDuqRPQfbWIvNSsYO8VocLaj3h63 gax+Ie/RefoCOwGsv8/8BsP1KquXj6KFF8gMemvnUtAIwzPyo+4LFfKInFPaEiJdajmk uDbCckYHlcQ1x/qfWhiWp3aGbE1/rnB40hVuOk0Xqdo0w2l/K5nfJbnXjzVc1BX8b3xl rJmzKqQ8L3srE8dKMAmHAfxC0QDQQjXgHhbYrwyUaGiYlfip7i4Ti/gx9JJj/W9oyw2A B8tQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w25si19317923eja.725.2021.07.19.03.12.22; Mon, 19 Jul 2021 03:12:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236215AbhGSJaf (ORCPT + 99 others); Mon, 19 Jul 2021 05:30:35 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:34888 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236180AbhGSJae (ORCPT ); Mon, 19 Jul 2021 05:30:34 -0400 Received: from [IPv6:2a02:810a:880:f54:121:b44d:bc4b:65bc] (unknown [IPv6:2a02:810a:880:f54:121:b44d:bc4b:65bc]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: dafna) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 609391F4248F; Mon, 19 Jul 2021 11:11:12 +0100 (BST) Subject: Re: [PATCH v2, 10/14] media: mtk-vcodec: Add core thread To: Yunfei Dong , Alexandre Courbot , Hans Verkuil , Tzung-Bi Shih , Tiffany Lin , Andrew-CT Chen , Mauro Carvalho Chehab , Rob Herring , Matthias Brugger , Tomasz Figa Cc: Hsin-Yi Wang , Fritz Koenig , Irui Wang , linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, srv_heupstream@mediatek.com, linux-mediatek@lists.infradead.org, Project_Global_Chrome_Upstream_Group@mediatek.com, Collabora Kernel ML , Enric Balletbo i Serra References: <20210717081233.7809-1-yunfei.dong@mediatek.com> <20210717081233.7809-11-yunfei.dong@mediatek.com> From: Dafna Hirschfeld Message-ID: <6bcb5964-0afa-f3c3-a80e-c34ef26eea4b@collabora.com> Date: Mon, 19 Jul 2021 12:11:09 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210717081233.7809-11-yunfei.dong@mediatek.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 17.07.21 10:12, Yunfei Dong wrote: > Core thread: > 1. Gets lat_buf from core msg queue. > 2. Proceeds core decode. > 3. Puts the lat_buf back to lat msg queue. > > Both H264 and VP9 rely on the core thread. > > Signed-off-by: Yunfei Dong > --- > v2: no changes > --- > .../platform/mtk-vcodec/mtk_vcodec_dec_drv.c | 6 ++++ > .../platform/mtk-vcodec/mtk_vcodec_drv.h | 3 ++ > .../platform/mtk-vcodec/vdec_msg_queue.c | 32 +++++++++++++++++++ > .../platform/mtk-vcodec/vdec_msg_queue.h | 6 ++++ > 4 files changed, 47 insertions(+) > > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c > index 078daeeff576..e05224aca888 100644 > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_drv.c > @@ -437,6 +437,12 @@ static int mtk_vcodec_probe(struct platform_device *pdev) > goto err_res; > } > > + if (VDEC_LAT_ARCH(dev->vdec_pdata->hw_arch)) { > + vdec_msg_queue_init_ctx(&dev->core_ctx, MTK_VDEC_CORE); > + dev->kthread_core = kthread_run(vdec_msg_queue_core_thead, dev, > + "mtk-%s", "core"); why would we want to run this thread when probing? also, don't we need to check errors? > + } > + > for (i = 0; i < MTK_VDEC_HW_MAX; i++) > mutex_init(&dev->dec_mutex[i]); > mutex_init(&dev->dev_mutex); > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > index 9207ce079960..3beba0e2ea91 100644 > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h > @@ -32,6 +32,7 @@ > #define MTK_VCODEC_MAX_PLANES 3 > #define MTK_V4L2_BENCHMARK 0 > #define WAIT_INTR_TIMEOUT_MS 1000 > +#define VDEC_LAT_ARCH(hw_arch) ((hw_arch) >= MTK_VDEC_LAT_SINGLE_CORE) > > /* > * enum mtk_hw_reg_idx - MTK hw register base index > @@ -480,6 +481,7 @@ struct mtk_vcodec_enc_pdata { > * @component_node: component node > * @comp_idx: component index > * > + * @kthread_core: thread used for core hardware decode > * @core_ctx: core queue context > */ > struct mtk_vcodec_dev { > @@ -524,6 +526,7 @@ struct mtk_vcodec_dev { > struct device_node *component_node[MTK_VDEC_HW_MAX]; > int comp_idx; > > + struct task_struct *kthread_core; > struct vdec_msg_queue_ctx core_ctx; > }; > > diff --git a/drivers/media/platform/mtk-vcodec/vdec_msg_queue.c b/drivers/media/platform/mtk-vcodec/vdec_msg_queue.c > index 016a70416e55..60bc3796bb58 100644 > --- a/drivers/media/platform/mtk-vcodec/vdec_msg_queue.c > +++ b/drivers/media/platform/mtk-vcodec/vdec_msg_queue.c > @@ -252,3 +252,35 @@ void vdec_msg_queue_deinit( > kfree(lat_buf->private_data); > } > } > + > +int vdec_msg_queue_core_thead(void *data) > +{ > + struct mtk_vcodec_dev *dev = data; > + struct vdec_lat_buf *lat_buf; > + struct mtk_vcodec_ctx *ctx; > + > + set_freezable(); > + for (;;) { > + try_to_freeze(); > + if (kthread_should_stop()) > + break; > + > + lat_buf = vdec_msg_queue_dqbuf(&dev->core_ctx); > + if (!lat_buf) > + continue; > + > + ctx = lat_buf->ctx; > + mtk_vcodec_set_curr_ctx(dev, ctx, MTK_VDEC_CORE); > + > + if (!lat_buf->core_decode) > + mtk_v4l2_err("Core decode callback func is NULL"); > + else > + lat_buf->core_decode(lat_buf); > + > + mtk_vcodec_set_curr_ctx(dev, NULL, MTK_VDEC_CORE); > + vdec_msg_queue_qbuf(&ctx->msg_queue.lat_ctx, lat_buf); > + } > + > + mtk_v4l2_debug(3, "Video Capture Thread End"); > + return 0; > +} > diff --git a/drivers/media/platform/mtk-vcodec/vdec_msg_queue.h b/drivers/media/platform/mtk-vcodec/vdec_msg_queue.h > index 297aa1598788..27ce528cbe89 100644 > --- a/drivers/media/platform/mtk-vcodec/vdec_msg_queue.h > +++ b/drivers/media/platform/mtk-vcodec/vdec_msg_queue.h > @@ -134,4 +134,10 @@ void vdec_msg_queue_deinit( > struct vdec_msg_queue *msg_queue, > struct mtk_vcodec_ctx *ctx); > > +/** > + * vdec_msg_queue_core_thead - used for core decoder. > + * @data: private data used for each codec > + */ > +int vdec_msg_queue_core_thead(void *data); > + > #endif >