Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp7590500rwl; Thu, 23 Mar 2023 06:26:11 -0700 (PDT) X-Google-Smtp-Source: AK7set9l49ZOuCr/PhIvMpKHSDoo+VaURAo/I7fitSh5g5d1Gq9ZZ98LW+qtW+0GtJOA9+va2DLm X-Received: by 2002:a17:906:5fc8:b0:92b:f3c3:7c5f with SMTP id k8-20020a1709065fc800b0092bf3c37c5fmr9736494ejv.53.1679577971050; Thu, 23 Mar 2023 06:26:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679577971; cv=none; d=google.com; s=arc-20160816; b=WplMnQAY/+nSwPANdNsPj8C3/hfG+WTVy4tVyqYsNWogNAAUwcvtVRIyTIfjEMUtq+ z2ZPtlzJACyIl7MQKItzmWJWcT8XxVH7+nv8wSQ02jTy0+jTNXm7EXJ2AQyqcJT4DcpK VrRr0CfFGlkFDkqzHeitNAnSrYHRIlpUCXCljGhCocOMox2wfJoD+cJwaBlM/PBK/aSh Om3MFoBnjENhD6YRNLHur8x0IgZLrN3Q6zRjYK5JddoTF6AxjOm9HD3r9NBxISb/CA/c gZP2nF7dK3jNvBgSolKGgmOJWBBR6/R5jSuut0n2o7DHDhDzvYFs+59emfhEq4ua22Dk l/mA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from :dkim-signature; bh=GmMQfQA56gIT3+GdfyQyErbER7C5xnWWjFJkmOMgIoM=; b=oa4M38iXdfasGM1+8JzBYRSD4vDekk4Ti4TnxB95mv/rz/zZAIFgQcWY8rWVbOG44I Q0BCL4S/NbhfzETktbXbYK+iCRT9dAyNcghacTWRuD/CzSG1BxpoR3CmU5VEpu7XbuTw PS52F8q3hlQfoQtIdvWOxevHnowegiUF9ZAfXwEGYawxq9frWbeg38CrDMwMTmBFb22l 36miJ9GAVP73T0br3ydDiVLGiAHexwB4pP9FFQBplWh70tkUAcrFarN+ffQkAD5xp9yD pmGX533toFflYd+zap8M0tQvd8EaWMS8yj0WEln61KcVoDlOOwE/391P5hztc9JsNvMM kbGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=WhE92Luc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i8-20020a50fc08000000b004acc823ab81si18309038edr.166.2023.03.23.06.25.47; Thu, 23 Mar 2023 06:26:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=WhE92Luc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231639AbjCWNCS (ORCPT + 99 others); Thu, 23 Mar 2023 09:02:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231486AbjCWNCN (ORCPT ); Thu, 23 Mar 2023 09:02:13 -0400 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 31B4731E39; Thu, 23 Mar 2023 06:02:08 -0700 (PDT) Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32NAfvR5031304; Thu, 23 Mar 2023 13:02:04 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=from : to : cc : subject : date : message-id; s=qcppdkim1; bh=GmMQfQA56gIT3+GdfyQyErbER7C5xnWWjFJkmOMgIoM=; b=WhE92LucgbkOS2gEo/BQRfNt4sEopa7JFmfRIzUBmrQX6pC4ycxmOCnawpQvTMu7ydhc EfwRZsGVzaKB38qOmCXG8axmxZlEb12DmPLKh0TXAs3lUrmlMuUDkW5gssj9H5RhF+V4 u/l8ZAc9miyyuNps9kGHLutGNhIjAknZ4t+1HvthKyLPvrI+kWVhtM0b7X6AyxLOlaq0 AzKpf3rexv5/ntMq+t8Mfr/uQB4I3lKSpnwUscg8BGbbLWfW6ccNS7eprY3yP/7merj/ rG5mso1FsJy8XZlz7On5/6ReKtSDIutoZKOz7bk3g2rNerCf6YCEwPq7GL1jVaG42PIu EA== Received: from apblrppmta02.qualcomm.com (blr-bdr-fw-01_GlobalNAT_AllZones-Outside.qualcomm.com [103.229.18.19]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3pgm9x8eex-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 23 Mar 2023 13:02:04 +0000 Received: from pps.filterd (APBLRPPMTA02.qualcomm.com [127.0.0.1]) by APBLRPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTP id 32ND1vxj010322; Thu, 23 Mar 2023 13:01:57 GMT Received: from pps.reinject (localhost [127.0.0.1]) by APBLRPPMTA02.qualcomm.com (PPS) with ESMTP id 3pd6ckjyj3-1; Thu, 23 Mar 2023 13:01:57 +0000 Received: from APBLRPPMTA02.qualcomm.com (APBLRPPMTA02.qualcomm.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 32ND1u7d010312; Thu, 23 Mar 2023 13:01:56 GMT Received: from vboma-linux.qualcomm.com (vboma-linux.qualcomm.com [10.204.65.94]) by APBLRPPMTA02.qualcomm.com (PPS) with ESMTP id 32ND1uBf010310; Thu, 23 Mar 2023 13:01:56 +0000 Received: by vboma-linux.qualcomm.com (Postfix, from userid 72083) id 9D9BD9008BA; Thu, 23 Mar 2023 18:31:55 +0530 (IST) From: Viswanath Boma To: Andy Gross , Bjorn Andersson , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, quic_vgarodia@quicinc.com, quic_dikshita@quicinc.com Cc: stanimir.k.varbanov@gmail.com, Viswanath Boma , Vikash Garodia Subject: [PATCH v4] venus: Enable sufficient sequence change support for sc7180 and fix for Decoder STOP command issue. Date: Thu, 23 Mar 2023 18:31:53 +0530 Message-Id: <20230323130153.8229-1-quic_vboma@quicinc.com> X-Mailer: git-send-email 2.17.1 X-QCInternal: smtphost X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: nkf43coqptUhaIxMB7yexmsFRk4h_xY5 X-Proofpoint-ORIG-GUID: nkf43coqptUhaIxMB7yexmsFRk4h_xY5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-03-22_21,2023-03-22_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 mlxlogscore=999 adultscore=0 spamscore=0 impostorscore=0 priorityscore=1501 clxscore=1011 mlxscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303150002 definitions=main-2303230098 X-Spam-Status: No, score=-0.5 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,RCVD_IN_DNSWL_LOW, SPF_HELO_NONE,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For VP9 bitstreams, there could be a change in resolution at interframe, for driver to get notified of such resolution change, enable the property in video firmware. Also, EOS handling is now made same in video firmware across all V6 SOCs, hence above a certain firmware version, the driver handling is made generic for all V6s Signed-off-by: Vikash Garodia Signed-off-by: Viswanath Boma Tested-by: Nathan Hebert --- Since v3 : Addressed comments to rectify email address. drivers/media/platform/qcom/venus/core.h | 18 ++++++++++++++++++ drivers/media/platform/qcom/venus/hfi_cmds.c | 1 + drivers/media/platform/qcom/venus/hfi_helper.h | 2 ++ drivers/media/platform/qcom/venus/hfi_msgs.c | 11 +++++++++-- drivers/media/platform/qcom/venus/vdec.c | 12 +++++++++++- 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h index 32551c2602a9..ee8b70a34656 100644 --- a/drivers/media/platform/qcom/venus/core.h +++ b/drivers/media/platform/qcom/venus/core.h @@ -202,6 +202,11 @@ struct venus_core { unsigned int core0_usage_count; unsigned int core1_usage_count; struct dentry *root; + struct venus_img_version { + u32 major; + u32 minor; + u32 rev; + } venus_ver; }; struct vdec_controls { @@ -500,4 +505,17 @@ venus_caps_by_codec(struct venus_core *core, u32 codec, u32 domain) return NULL; } +static inline int +is_fw_rev_or_newer(struct venus_core *core, u32 vmajor, u32 vminor, u32 vrev) +{ + return ((core)->venus_ver.major == vmajor && (core)->venus_ver.minor == + vminor && (core)->venus_ver.rev >= vrev); +} + +static inline int +is_fw_rev_or_older(struct venus_core *core, u32 vmajor, u32 vminor, u32 vrev) +{ + return ((core)->venus_ver.major == vmajor && (core)->venus_ver.minor == + vminor && (core)->venus_ver.rev <= vrev); +} #endif diff --git a/drivers/media/platform/qcom/venus/hfi_cmds.c b/drivers/media/platform/qcom/venus/hfi_cmds.c index bc3f8ff05840..9efe04961890 100644 --- a/drivers/media/platform/qcom/venus/hfi_cmds.c +++ b/drivers/media/platform/qcom/venus/hfi_cmds.c @@ -521,6 +521,7 @@ static int pkt_session_set_property_1x(struct hfi_session_set_property_pkt *pkt, pkt->shdr.hdr.size += sizeof(u32) + sizeof(*en); break; } + case HFI_PROPERTY_PARAM_VDEC_ENABLE_SUFFICIENT_SEQCHANGE_EVENT: case HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER: { struct hfi_enable *in = pdata; struct hfi_enable *en = prop_data; diff --git a/drivers/media/platform/qcom/venus/hfi_helper.h b/drivers/media/platform/qcom/venus/hfi_helper.h index 105792a68060..c8aaf870829c 100644 --- a/drivers/media/platform/qcom/venus/hfi_helper.h +++ b/drivers/media/platform/qcom/venus/hfi_helper.h @@ -469,6 +469,8 @@ #define HFI_PROPERTY_PARAM_VDEC_PIXEL_BITDEPTH 0x1003007 #define HFI_PROPERTY_PARAM_VDEC_PIC_STRUCT 0x1003009 #define HFI_PROPERTY_PARAM_VDEC_COLOUR_SPACE 0x100300a +#define HFI_PROPERTY_PARAM_VDEC_ENABLE_SUFFICIENT_SEQCHANGE_EVENT \ + 0x0100300b /* * HFI_PROPERTY_CONFIG_VDEC_COMMON_START diff --git a/drivers/media/platform/qcom/venus/hfi_msgs.c b/drivers/media/platform/qcom/venus/hfi_msgs.c index df96db3761a7..07ac0fcd2852 100644 --- a/drivers/media/platform/qcom/venus/hfi_msgs.c +++ b/drivers/media/platform/qcom/venus/hfi_msgs.c @@ -248,9 +248,10 @@ static void hfi_sys_init_done(struct venus_core *core, struct venus_inst *inst, } static void -sys_get_prop_image_version(struct device *dev, +sys_get_prop_image_version(struct venus_core *core, struct hfi_msg_sys_property_info_pkt *pkt) { + struct device *dev = core->dev; u8 *smem_tbl_ptr; u8 *img_ver; int req_bytes; @@ -263,6 +264,12 @@ sys_get_prop_image_version(struct device *dev, return; img_ver = pkt->data; + if (IS_V4(core)) + sscanf(img_ver, "14:VIDEO.VE.%u.%u-%u-PROD", + &core->venus_ver.major, &core->venus_ver.minor, &core->venus_ver.rev); + else if (IS_V6(core)) + sscanf(img_ver, "14:VIDEO.VPU.%u.%u-%u-PROD", + &core->venus_ver.major, &core->venus_ver.minor, &core->venus_ver.rev); dev_dbg(dev, VDBGL "F/W version: %s\n", img_ver); @@ -286,7 +293,7 @@ static void hfi_sys_property_info(struct venus_core *core, switch (pkt->property) { case HFI_PROPERTY_SYS_IMAGE_VERSION: - sys_get_prop_image_version(dev, pkt); + sys_get_prop_image_version(core, pkt); break; default: dev_dbg(dev, VDBGL "unknown property data\n"); diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c index 4ceaba37e2e5..36c88858ea9d 100644 --- a/drivers/media/platform/qcom/venus/vdec.c +++ b/drivers/media/platform/qcom/venus/vdec.c @@ -545,7 +545,7 @@ vdec_decoder_cmd(struct file *file, void *fh, struct v4l2_decoder_cmd *cmd) fdata.buffer_type = HFI_BUFFER_INPUT; fdata.flags |= HFI_BUFFERFLAG_EOS; - if (IS_V6(inst->core)) + if (IS_V6(inst->core) && is_fw_rev_or_older(inst->core, 1, 0, 87)) fdata.device_addr = 0; else fdata.device_addr = 0xdeadb000; @@ -671,6 +671,16 @@ static int vdec_set_properties(struct venus_inst *inst) return ret; } + /* Enabling sufficient sequence change support for VP9 */ + if (of_device_is_compatible(inst->core->dev->of_node, "qcom,sc7180-venus")) { + if (is_fw_rev_or_newer(inst->core, 5, 4, 51)) { + ptype = HFI_PROPERTY_PARAM_VDEC_ENABLE_SUFFICIENT_SEQCHANGE_EVENT; + ret = hfi_session_set_property(inst, ptype, &en); + if (ret) + return ret; + } + } + ptype = HFI_PROPERTY_PARAM_VDEC_CONCEAL_COLOR; conceal = ctr->conceal_color & 0xffff; conceal |= ((ctr->conceal_color >> 16) & 0xffff) << 10; -- 2.17.1