Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp355076ybi; Mon, 15 Jul 2019 22:10:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqy6jRmC3ciGONS1BLQrn9h/hbyXLx7CnV3cJnY7ggaPsNyDDl0FaOtqaiqx/ODXSeWosmmi X-Received: by 2002:a17:90a:bc0c:: with SMTP id w12mr4313307pjr.111.1563253812414; Mon, 15 Jul 2019 22:10:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563253812; cv=none; d=google.com; s=arc-20160816; b=s4YjK8uspxEGVXboxZ84Q4HkJD8bJ5CplIVL7RdnpxcNu247ltHzilpAL7+JmUIflJ C0egbkRBJVWgkfOkYdPO/XWZrOxpZzd7yu/VK0Sw0e9dsFEsn4UWDUn6qH6slWA2U00W SLgs7vNQEfiNm/HOeDMUbFcCqdIOjMb0p22ZWuWUZjZgLEeZixJu7EWqFNmIICRL1zed ESc7axu7xUTD2I/Zhps8ygE8x1NWln3wtjLVsUMtQRNjsz7QSGRThbExF1asNj0ojw6W 5bCPDgly86L8tsq6VIBo88P2jXIFgg1ZLqlESNYZCNjc0h/DCpKRYmd1L9QpDG5cfrwT sl2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dmarc-filter:dkim-signature:dkim-signature; bh=8XasvcecIN6EV6QN5NO6Q8b/Sn/7dx3zK5LLz4x/lII=; b=usGfUNyvYvJl2g8NBHKH67MuqWvpZk9X0bwnLTFS3pMwOkSjilSDByEkd0lWWG3iDb DtHuD5xOXF0AgE4kRM3CiGwY6RR/UTE0hK7lPCJYOiwnX6v7MHXDH83Jqp+nf19Rza9c xpW6XAPm3pjVwzd8eQAqEZiTzwz2RxsXA2wiB5bdnz6rudQTTs/YV6xfzEzTRB0KVdz2 txYwC2rI9nD8Aul/CGoGoMzRMsymVMO+hoIHH6NUcl2BEjl40PBsK3qGpoispEeeKc5i IUoRUV2D/gFxbzlajGyNIWlxRP/74ltP8TUuNZekjuh5j9RIhgXg1KMN52UakHqYx1J9 TQLw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=KZjZ5zZN; dkim=pass header.i=@codeaurora.org header.s=default header.b=BdzfZBFF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i8si18885073pfk.189.2019.07.15.22.09.56; Mon, 15 Jul 2019 22:10:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=KZjZ5zZN; dkim=pass header.i=@codeaurora.org header.s=default header.b=BdzfZBFF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731017AbfGPFJf (ORCPT + 99 others); Tue, 16 Jul 2019 01:09:35 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:58328 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726487AbfGPFJe (ORCPT ); Tue, 16 Jul 2019 01:09:34 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id B9C9A618DD; Tue, 16 Jul 2019 05:09:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1563253773; bh=w+/eBIzrpt3OyUu4hVcL4bF6SRMbjgzEylM6+Ge1s2E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KZjZ5zZNc+iMaklaVKwE+KDChwk7NiGTLT+0pVZYzag5Vvdvfa4vKgF7NiBdG6JXc qwmV2r91ooll8MPQR3aMh40yo3Ljz2wwwaQ2317jQNcxoiNtvBlrbe8ytIhfKHczI4 YoC4e5BAQy4yqauasy0STevgv8dQ2oH5MyMLm0vk= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED,SPF_NONE autolearn=no autolearn_force=no version=3.4.0 Received: from amasule-linux.qualcomm.com (blr-c-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.19.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: amasule@codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id CFD1361836; Tue, 16 Jul 2019 05:09:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1563253772; bh=w+/eBIzrpt3OyUu4hVcL4bF6SRMbjgzEylM6+Ge1s2E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BdzfZBFFyKk1GsYRfXoWSkTq2w0yl0PelNhNY7EFHQczx0VD0cSF7rIx5Q/hlu3S7 2dPW9b1h6TnJ4JcwiZAVeqWR1fL8xXC15VX/LDYCldqhJK3ay90/5R5CMJYSEtykmu Ji68nlKWaJlI/hoNTdLGLBf29JztoYWXG0zIh9fA= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org CFD1361836 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=amasule@codeaurora.org From: Aniket Masule To: linux-media@vger.kernel.org, stanimir.varbanov@linaro.org Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, vgarodia@codeaurora.org, Aniket Masule Subject: [PATCH v5 1/4] media: venus: Add codec data table Date: Tue, 16 Jul 2019 10:39:11 +0530 Message-Id: <1563253754-12003-2-git-send-email-amasule@codeaurora.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1563253754-12003-1-git-send-email-amasule@codeaurora.org> References: <1563253754-12003-1-git-send-email-amasule@codeaurora.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add vpp cycles for different types of codec. It indicates the cycles required by video hardware to process each macroblock. Add vsp cycles, cycles required by stream processor. Initialize the codec data with core resources. Signed-off-by: Aniket Masule --- drivers/media/platform/qcom/venus/core.c | 13 +++++++++++++ drivers/media/platform/qcom/venus/core.h | 16 +++++++++++++++ drivers/media/platform/qcom/venus/helpers.c | 30 +++++++++++++++++++++++++++++ drivers/media/platform/qcom/venus/helpers.h | 1 + drivers/media/platform/qcom/venus/vdec.c | 4 ++++ drivers/media/platform/qcom/venus/venc.c | 4 ++++ 6 files changed, 68 insertions(+) diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c index 7393667..ad6bb74 100644 --- a/drivers/media/platform/qcom/venus/core.c +++ b/drivers/media/platform/qcom/venus/core.c @@ -473,9 +473,22 @@ static __maybe_unused int venus_runtime_resume(struct device *dev) { 244800, 100000000 }, /* 1920x1080@30 */ }; +static struct codec_freq_data sdm845_codec_freq_data[] = { + { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 10 }, + { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 10 }, + { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_ENC, 675, 10 }, + { V4L2_PIX_FMT_MPEG2, VIDC_SESSION_TYPE_DEC, 200, 10 }, + { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 200, 10 }, + { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 200, 10 }, + { V4L2_PIX_FMT_VP8, VIDC_SESSION_TYPE_DEC, 200, 10 }, + { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10 }, +}; + static const struct venus_resources sdm845_res = { .freq_tbl = sdm845_freq_table, .freq_tbl_size = ARRAY_SIZE(sdm845_freq_table), + .codec_freq_data = sdm845_codec_freq_data, + .codec_freq_data_size = ARRAY_SIZE(sdm845_codec_freq_data), .clks = {"core", "iface", "bus" }, .clks_num = 3, .max_load = 2563200, diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h index 7a3feb5..b8aef19 100644 --- a/drivers/media/platform/qcom/venus/core.h +++ b/drivers/media/platform/qcom/venus/core.h @@ -35,12 +35,21 @@ struct reg_val { u32 value; }; +struct codec_freq_data { + u32 pixfmt; + u32 session_type; + unsigned long vpp_freq; + unsigned long vsp_freq; +}; + struct venus_resources { u64 dma_mask; const struct freq_tbl *freq_tbl; unsigned int freq_tbl_size; const struct reg_val *reg_tbl; unsigned int reg_tbl_size; + const struct codec_freq_data *codec_freq_data; + unsigned int codec_freq_data_size; const char * const clks[VIDC_CLKS_NUM_MAX]; unsigned int clks_num; enum hfi_version hfi_version; @@ -216,6 +225,12 @@ struct venus_buffer { struct list_head ref_list; }; +struct clock_data { + u32 core_id; + unsigned long freq; + const struct codec_freq_data *codec_freq_data; +}; + #define to_venus_buffer(ptr) container_of(ptr, struct venus_buffer, vb) /** @@ -275,6 +290,7 @@ struct venus_inst { struct list_head list; struct mutex lock; struct venus_core *core; + struct clock_data clk_data; struct list_head dpbbufs; struct list_head internalbufs; struct list_head registeredbufs; diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c index 5cad601..7492373 100644 --- a/drivers/media/platform/qcom/venus/helpers.c +++ b/drivers/media/platform/qcom/venus/helpers.c @@ -715,6 +715,36 @@ int venus_helper_set_core_usage(struct venus_inst *inst, u32 usage) } EXPORT_SYMBOL_GPL(venus_helper_set_core_usage); +int venus_helper_init_codec_freq_data(struct venus_inst *inst) +{ + const struct codec_freq_data *data; + unsigned int i, data_size; + u32 pixfmt; + int ret = 0; + + if (!IS_V4(inst->core)) + return 0; + + data = inst->core->res->codec_freq_data; + data_size = inst->core->res->codec_freq_data_size; + pixfmt = inst->session_type == VIDC_SESSION_TYPE_DEC ? + inst->fmt_out->pixfmt : inst->fmt_cap->pixfmt; + + for (i = 0; i < data_size; i++) { + if (data[i].pixfmt == pixfmt && + data[i].session_type == inst->session_type) { + inst->clk_data.codec_freq_data = &data[i]; + break; + } + } + + if (!inst->clk_data.codec_freq_data) + ret = -EINVAL; + + return ret; +} +EXPORT_SYMBOL_GPL(venus_helper_init_codec_freq_data); + int venus_helper_set_num_bufs(struct venus_inst *inst, unsigned int input_bufs, unsigned int output_bufs, unsigned int output2_bufs) diff --git a/drivers/media/platform/qcom/venus/helpers.h b/drivers/media/platform/qcom/venus/helpers.h index 2475f284..2c13245 100644 --- a/drivers/media/platform/qcom/venus/helpers.h +++ b/drivers/media/platform/qcom/venus/helpers.h @@ -41,6 +41,7 @@ int venus_helper_set_output_resolution(struct venus_inst *inst, unsigned int width, unsigned int height, u32 buftype); int venus_helper_set_work_mode(struct venus_inst *inst, u32 mode); +int venus_helper_init_codec_freq_data(struct venus_inst *inst); int venus_helper_set_core_usage(struct venus_inst *inst, u32 usage); int venus_helper_set_num_bufs(struct venus_inst *inst, unsigned int input_bufs, unsigned int output_bufs, diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c index 282de21..d037f80 100644 --- a/drivers/media/platform/qcom/venus/vdec.c +++ b/drivers/media/platform/qcom/venus/vdec.c @@ -660,6 +660,10 @@ static int vdec_init_session(struct venus_inst *inst) if (ret) goto deinit; + ret = venus_helper_init_codec_freq_data(inst); + if (ret) + goto deinit; + return 0; deinit: hfi_session_deinit(inst); diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c index 32cff29..cdddc82 100644 --- a/drivers/media/platform/qcom/venus/venc.c +++ b/drivers/media/platform/qcom/venus/venc.c @@ -847,6 +847,10 @@ static int venc_init_session(struct venus_inst *inst) if (ret) goto deinit; + ret = venus_helper_init_codec_freq_data(inst); + if (ret) + goto deinit; + ret = venc_set_properties(inst); if (ret) goto deinit; -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project