Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp3526970pxv; Sun, 4 Jul 2021 22:35:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzeLvls3xqZd9vT88+7gjfTfc+CosdmGlQO+xEBnkIexiIgvYyQvpCPk3lJA+NozjeosXlT X-Received: by 2002:aa7:c450:: with SMTP id n16mr13789926edr.58.1625463320386; Sun, 04 Jul 2021 22:35:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625463320; cv=none; d=google.com; s=arc-20160816; b=uZIKRixU78RJrWk8CIDeAo+ElDYjne9orVtPwXAgoYbBRCo0GQGCUy3kpFvUf2vdff QNBdTXw/XrmrcubJTfyKSDNEbLTuGyidpAzQyJx+Fz4wdI/TW3aUqvN9XTxcXIvpNvyQ taf2ynZZDORyk0tYxMOxrShdVcm0GpieHhD6sAEbd294rLi8xBnoocBbDN0np5RANgp9 2LKzj8A9S9k+e9T9cDiLLo70Xwv/3tgHnVxtOkc19psRjayFdp05FE5b++EfCEqXxzPV PC4mP/wy9TomSEjhNhWquLqIN6+l8g1m17kELMOpMnvSx3D+Y25WmN+Wuz3txAQSxUMM TMFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Uh93zqC4N8O1eDWIzzhw5DGa3bFR+UI2EYT1XWdtLwE=; b=OOa0JVLCvFe/Y2C/Kj9cIG9R+8sCatUwIGvFipJlOU2ZnXgfeXIqUp68zyqW69X4Zq bWTuLkKm+zY4H8NsYKAn0xsxxGInwGKIKloiDdt1WraaMAPI5aKKK/fLcwSK48LsAbCU ssqQkpC9gGsNdWr7wS8Rr2MU135ZDjGAlZliUsT3xhVyiSybixhAjV2xeWUqv+FBhWfW 1zbfYcfCxEH3kjKVWSoE/6jWtGTXCUkKAU3i/Ul9+0j4rHSaKLRgY85RVqWB7k2jG7xr lW0cZc2vSNWCP+W/YgFLPXlhaCOE/IQlFADb8u7fifXY9MNFlUN9E/B/u5KsxVkbepS3 PEVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=GYRSNiS+; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l20si10153110edt.377.2021.07.04.22.34.58; Sun, 04 Jul 2021 22:35:20 -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; dkim=pass header.i=@chromium.org header.s=google header.b=GYRSNiS+; 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=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229998AbhGEFgV (ORCPT + 99 others); Mon, 5 Jul 2021 01:36:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229781AbhGEFgR (ORCPT ); Mon, 5 Jul 2021 01:36:17 -0400 Received: from mail-pg1-x52d.google.com (mail-pg1-x52d.google.com [IPv6:2607:f8b0:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6507CC061764 for ; Sun, 4 Jul 2021 22:33:41 -0700 (PDT) Received: by mail-pg1-x52d.google.com with SMTP id h4so17237329pgp.5 for ; Sun, 04 Jul 2021 22:33:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Uh93zqC4N8O1eDWIzzhw5DGa3bFR+UI2EYT1XWdtLwE=; b=GYRSNiS+wapvLUk/uNOxk5ErWOsajFrBnCvjuVKGySLKTj+/s+gIQVggrLZ1n37ARk YCjSLrEKs63kwK3aI0Y2ELJadZu8KbyL2EqcTLFEkdxfR3VXbwDE0fj7K3YxK0SDTqkt 9KfWHnGsXyp1j37IPn2b1DLz2gWVfZIZAZRgI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Uh93zqC4N8O1eDWIzzhw5DGa3bFR+UI2EYT1XWdtLwE=; b=ipox1U0eiHVvPdMi1qzUC/pIsesNGaCEFAtRVo8+IFqqswP0hX0xntoEBwJXwMKdQM yueqOP3KHxmtcVlUIumo1w/NltUspyg0GfJbAwD/bqYkiUejViIf48cw6bHp2zWRxLpQ jGtsoCBx/UT865yJRedHlqS1DtgqriuLTWdBYKU3+4Bj7bUcZN3jYirfNHW3pXplmG7N Jw/8k2++Xsd85ncCF/SHdLvnBmeer9EtiPZ8Dn7xfoBONpjdR/CIPIvbOY+shVhgmmZE 2jXRXbaJ+ROYprzXqwPCfukhcs9fRqC+g8EWd6gjqw9o6/f6gji8Mj2WGZUJQwrWwzhO uglg== X-Gm-Message-State: AOAM531qDQi2eWd0HIDBC/eppZhH9fTYRth1S/fsYvgnI0uk0/cvM3iH 7tNDrTlMSBwbvzVupY4o/7h+fA== X-Received: by 2002:aa7:98dc:0:b029:31a:7509:2322 with SMTP id e28-20020aa798dc0000b029031a75092322mr10062908pfm.7.1625463220953; Sun, 04 Jul 2021 22:33:40 -0700 (PDT) Received: from acourbot.tok.corp.google.com ([2401:fa00:8f:203:3fed:7130:60f:265a]) by smtp.gmail.com with ESMTPSA id x19sm6805245pfp.115.2021.07.04.22.33.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jul 2021 22:33:40 -0700 (PDT) From: Alexandre Courbot To: Tiffany Lin , Andrew-CT Chen , Hans Verkuil , Dafna Hirschfeld , Yunfei Dong Cc: Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, Alexandre Courbot , Tzung-Bi Shih Subject: [PATCH v6 07/14] media: mtk-vcodec: vdec: handle firmware version field Date: Mon, 5 Jul 2021 14:32:51 +0900 Message-Id: <20210705053258.1614177-8-acourbot@chromium.org> X-Mailer: git-send-email 2.32.0.93.g670b81a890-goog In-Reply-To: <20210705053258.1614177-1-acourbot@chromium.org> References: <20210705053258.1614177-1-acourbot@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Firmwares for decoders newer than MT8173 will include an ABI version number in their initialization ack message. Add the capacity to manage it and make initialization fail if the firmware ABI is of a version that we don't support. For MT8173, this ABI version field does not exist ; thus ignore it on this chip. There should only be one firmware version available for it anyway. Signed-off-by: Alexandre Courbot Reviewed-by: Tzung-Bi Shih --- .../mtk-vcodec/mtk_vcodec_dec_stateful.c | 1 + .../platform/mtk-vcodec/mtk_vcodec_drv.h | 4 ++++ .../media/platform/mtk-vcodec/vdec_ipi_msg.h | 5 +++++ .../media/platform/mtk-vcodec/vdec_vpu_if.c | 21 +++++++++++++++++-- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c index eba6d8c7fe87..59c24b22ab6d 100644 --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c @@ -611,6 +611,7 @@ static struct vb2_ops mtk_vdec_frame_vb2_ops = { }; const struct mtk_vcodec_dec_pdata mtk_vdec_8173_pdata = { + .chip = MTK_MT8173, .init_vdec_params = mtk_init_vdec_params, .ctrls_setup = mtk_vcodec_dec_ctrls_setup, .vdec_vb2_ops = &mtk_vdec_frame_vb2_ops, diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h index a3c401022567..17c960aa5262 100644 --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_drv.h @@ -327,6 +327,8 @@ enum mtk_chip { * @vdec_framesizes: supported video decoder frame sizes * @num_framesizes: count of video decoder frame sizes * + * @chip: chip this decoder is compatible with + * * @uses_stateless_api: whether the decoder uses the stateless API with requests */ @@ -346,6 +348,8 @@ struct mtk_vcodec_dec_pdata { const struct mtk_codec_framesizes *vdec_framesizes; const int num_framesizes; + enum mtk_chip chip; + bool uses_stateless_api; }; diff --git a/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h b/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h index 68e8d5cb16d7..236bd32dcacc 100644 --- a/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h +++ b/drivers/media/platform/mtk-vcodec/vdec_ipi_msg.h @@ -83,12 +83,17 @@ struct vdec_ap_ipi_dec_start { * @status : VPU exeuction result * @ap_inst_addr : AP vcodec_vpu_inst instance address * @vpu_inst_addr : VPU decoder instance address + * @vdec_abi_version: ABI version of the firmware. Kernel can use it to + * ensure that it is compatible with the firmware. + * This field is not valid for MT8173 and must not be + * accessed for this chip. */ struct vdec_vpu_ipi_init_ack { uint32_t msg_id; int32_t status; uint64_t ap_inst_addr; uint32_t vpu_inst_addr; + uint32_t vdec_abi_version; }; #endif diff --git a/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c b/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c index 58b0e6fa8fd2..203089213e67 100644 --- a/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c +++ b/drivers/media/platform/mtk-vcodec/vdec_vpu_if.c @@ -24,6 +24,22 @@ static void handle_init_ack_msg(const struct vdec_vpu_ipi_init_ack *msg) vpu->inst_addr = msg->vpu_inst_addr; mtk_vcodec_debug(vpu, "- vpu_inst_addr = 0x%x", vpu->inst_addr); + + /* Firmware version field does not exist on MT8173. */ + if (vpu->ctx->dev->vdec_pdata->chip == MTK_MT8173) + return; + + /* Check firmware version. */ + mtk_vcodec_debug(vpu, "firmware version 0x%x\n", msg->vdec_abi_version); + switch (msg->vdec_abi_version) { + case 1: + break; + default: + mtk_vcodec_err(vpu, "unhandled firmware version 0x%x\n", + msg->vdec_abi_version); + vpu->failure = 1; + break; + } } /* @@ -44,6 +60,9 @@ static void vpu_dec_ipi_handler(void *data, unsigned int len, void *priv) mtk_vcodec_debug(vpu, "+ id=%X", msg->msg_id); + vpu->failure = msg->status; + vpu->signaled = 1; + if (msg->status == 0) { switch (msg->msg_id) { case VPU_IPIMSG_DEC_INIT_ACK: @@ -63,8 +82,6 @@ static void vpu_dec_ipi_handler(void *data, unsigned int len, void *priv) } mtk_vcodec_debug(vpu, "- id=%X", msg->msg_id); - vpu->failure = msg->status; - vpu->signaled = 1; } static int vcodec_vpu_send_msg(struct vdec_vpu_inst *vpu, void *msg, int len) -- 2.32.0.93.g670b81a890-goog