From nobody Fri Jun 12 22:33:08 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6E55A38425A for ; Tue, 12 May 2026 08:55:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576131; cv=none; b=Tew5vgVIMnNFIQ+g/4plUDyl3rv+MplSD3B0+8Z/nM8EPa/n4v212g4FsB+MyF0XRIZ4TcI8o7+A2haTgu8JP4i6iCA/auFuTJtvD7oKBkOBqbOECxN2w7gKqWkx4CU+uWyEybmvwGhjLZYyf3Pl6wFR8fpQdzxm8X2BvjLhz9A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576131; c=relaxed/simple; bh=9gYfHLZOzyiYGH9KPxb4N5OlEJKgD1lg9nnnmd8L9Go=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R5aWw2+wvObFUkwmkS66ICqSM0NcjSCu3sd1RF7E/J/JBIEpzHZL6wcW6mbcAJQ1heTsanzk7vKkD/Ju3GVACJib3gFCtGALzZaPv+fpC05uN5WGHa2oReWoeUXGzPOFg/kZW9m7nsrR2YNB+ujEhBu+qdvhiOCtvS2DlqEbmLk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=kv25xJyE; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=VSAmKC+A; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="kv25xJyE"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="VSAmKC+A" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64C5AK1n2186598 for ; Tue, 12 May 2026 08:55:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= D4Nff6i9fOJtMY+TCmFBlmFCK9ZgA1aIWnbaBNyHj+8=; b=kv25xJyE6gytY7OT nNqf/X6YKxaVCvORxbcOA8nhHQYfP9RVOksALZUE+j+pnN7J++l8zwBB/B2pjgyT /vLVqvR35S+bM0qQLfs4gWAFnU+emQ7pcWZWYUYLJEMte7ZBHilBE6MIoMmQEFPg O3tSTlZevKqrPMb2xdSVvndEqOkuAqLV7petvAuKXcDJD/FJuo3s6bw8PAQqJfCZ 3aVWee2caZ7zGqWdB8h9ThFCuOywR3WbTzvvX2PIv+jcx4Kk/q1gI4m6gsKP/mZZ +fi14WfpKwKvrx8MRc6APFlqNX6fJr8KojhfzjEa3OtiVbH8+dAYU37g7zWmsfJP 2JljkA== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e3nv0t915-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 08:55:25 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2bc763c7256so65705245ad.3 for ; Tue, 12 May 2026 01:55:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778576123; x=1779180923; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=D4Nff6i9fOJtMY+TCmFBlmFCK9ZgA1aIWnbaBNyHj+8=; b=VSAmKC+AnPj2BgiOx+TyrWpD7VD+jFfl7oLtQLqWZok+/TQ13p6OvFfD2GXMm4Q9DZ eQgDAaUtRh/nZsRONN0MfGezMc9ZmKC9FpjZ58otib5t3t4uOgSpfjF0acSHMNuruD3u ROJ+N4NUqqdYLn+HsnF+ws0BVv8EO8e0DkWoHnBHIPyk5GINtLhsLB1OCVohgZLh0qUb vwqITc12SfCJFkVdUBdvBw2x1XsyONAVF5kYHUktFf5aFW2rCUCP6ekl0/asvn41SeMf cA81hDksKXhlsRA16bSRtScJar/fl/YVmhmiPeslwfKv2ztoyHsShgytGLTYx8IXQkmI i5Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778576123; x=1779180923; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=D4Nff6i9fOJtMY+TCmFBlmFCK9ZgA1aIWnbaBNyHj+8=; b=FkqQF2M+iIcCuzc9+jJ+kXtrARNO42lmNYNhfugQKUYXXudpxqTX5GKUUQc+utXf8X 1Q1Af478c9oTAIZhEgK7Kk8UN51lMUIVNqiUVmgn60oOKnl8i+JW0UywYfItNWNexxQm +BXRm1NihLCKcaJl7FDPRCVNQ/2pKh2LiiSgl3cSYU2IlEsByYR9gSSkHi6gNSX6xA41 Qs1YyuSUP0LTGs6/c19pqbbLDYqwsug1L8LPUKmdW92TN8HmFeXicoVB8gaLH/bMBmhM PARlUp1X/e/8FiRpcLRXOBZ0AhR4QLCp1y9vePnKCuhpEpyaqhDOQVi4vL2EM18N4zwl c0HQ== X-Forwarded-Encrypted: i=1; AFNElJ99BI6J8Lbq+bq8ktgDFkY1/wCvC5PiQ1b5u1M2kUFZnEz/C6j95W9cIUXpfMWE9/45pffQ/7D3LclEELQ=@vger.kernel.org X-Gm-Message-State: AOJu0Ywoy+ZTWB9QhKkZ/Wcu1/EKij6HyX+pUmD60Jql/va1iR1ihbuf d8trcVbXucAh7QjEW7SyF06Rr6vzOlbF0Tv96vO0ALchkUfVjuTKP/h/pkzuuuQM6AL7uJoHw3l AS1Qhc4bL0EJ1rp6CVA5+iEEf5BSRYTM0aMytAGtd5uZd4h5y2Ri3Dq+h6KhNbMgv7qE= X-Gm-Gg: Acq92OHhVKr4s12N1ibwCEmDZavFcCTrQgwJ5aE5c1PQBRbtmhXXFNmSSqNzsTmJPnc PwyteVFmTWNUhw/IQxwsqOF4LnmdIZVGqop20Eemf2XgALb0JrOxXfZB9pHXNp3uKdpslG2RCcd J5kVw1GYRfuHG+ynCXtSG0dvsZsrrHMvfGvlpDjjHCIc+icb14VRXodOsCoZ454BR/PjCvpJzsn CRxCKkaM2qG6Ke+4PVrMzrXHvAMkenwBtd7LVNuG9/73EiXJ79pENYUPloIuCfyynK9a5IecH6t LX2cGwohrS8teX+uWqdMww0k3N78GwVrYyyKTT3i+j3S0RrisTMNJG4bpy4+HrDWj7zIYDIjRat Cs21peoiwboxhRGJic+umEaV97HNsdYc0GWSV1OReHYCAW4mgX//EEqvNM2gkCvql15cXYi+7/1 xQPtLOmseiu35isA3eMrJ5 X-Received: by 2002:a17:902:da90:b0:2b9:6458:1a2c with SMTP id d9443c01a7336-2bc7a9a3787mr148881815ad.13.1778576123151; Tue, 12 May 2026 01:55:23 -0700 (PDT) X-Received: by 2002:a17:902:da90:b0:2b9:6458:1a2c with SMTP id d9443c01a7336-2bc7a9a3787mr148881445ad.13.1778576122505; Tue, 12 May 2026 01:55:22 -0700 (PDT) Received: from WANGAOW-LAB01.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm127641405ad.66.2026.05.12.01.55.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 01:55:21 -0700 (PDT) From: Wangao Wang Date: Tue, 12 May 2026 16:55:10 +0800 Subject: [PATCH v7 1/6] media: qcom: iris: Add intra refresh support for gen1 encoder Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-batch2_features-v7-1-4954e3b4df84@oss.qualcomm.com> References: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> In-Reply-To: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Wangao Wang , Neil Armstrong X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778576115; l=7834; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=9gYfHLZOzyiYGH9KPxb4N5OlEJKgD1lg9nnnmd8L9Go=; b=YiaKkVaS7dNvC+H3SifVvTe1BjRhO6yEoN2kRrG1czAJZCxP9gwtZylYLwHGNV+EnEOwPoQQp wFY666EqVlWCaKDTrrWgkwXZoPmZPc9+6wuFfjkxeKeSeitu1IDvL9T X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDA4OSBTYWx0ZWRfXxTvPwsQo1b6U B8MWuj7avM+GdEVUAx0mIp6Oq+BJLjzoIvKasExMgIaUX0Z9BjmGXwM6ANsrLKEI7WVxbIknyxy LROSrFpoX8Q9gbnAkwJK/CvsBKP5hssgbJMNqJe+WpF6hd7NkF45U4l0NjXaIeQ83pP/0Kq+bId kk0q7ky/bL5bNU+GRM7r/Dj9Zdqc9trFPWwkMd2OSTfHYkf/aEtqAGqoAzVIJvVNRdzSkW1UzJm kzHxJvCrZgNp4aBm2KCM58SDwTEGDhSSPIY58UooK5b6YUsqIVJP6ZrROCAtLNlanJ2jBwISf4Z gX/raFk4wz3HMDfTI6Q4m0I6i+y+mWomhv/buoeLgI6GhNx834QhuusjmbfAJjaHW/YHqS05B4R ChafAnJP0ttzyqZr91O+6vHIcqKs2QNGZi0/aBp2phW0nhV6KAKgLnFlII+GWAnM+YOUVCcLhxP ZIJwFP/seIIOkO9wvbQ== X-Authority-Analysis: v=2.4 cv=bpB8wkai c=1 sm=1 tr=0 ts=6a02eafd cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=vcDqveFK9my7lXZq-ZEA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: jY-wkb-TUa_T8ZKTXqCyaW9XQ-qxyIMa X-Proofpoint-ORIG-GUID: jY-wkb-TUa_T8ZKTXqCyaW9XQ-qxyIMa X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 malwarescore=0 priorityscore=1501 adultscore=0 impostorscore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120089 Add support for intra refresh configuration on gen1 encoder by enabling V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD and V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE controls. Reviewed-by: Dikshita Agarwal Tested-by: Neil Armstrong # on SM8650-HDK Signed-off-by: Wangao Wang Reviewed-by: Dmitry Baryshkov --- drivers/media/platform/qcom/iris/iris_ctrls.c | 39 ++++++++++++++++++= +++- drivers/media/platform/qcom/iris/iris_ctrls.h | 3 +- drivers/media/platform/qcom/iris/iris_hfi_gen1.c | 19 +++++++++++ .../platform/qcom/iris/iris_hfi_gen1_command.c | 8 +++++ .../platform/qcom/iris/iris_hfi_gen1_defines.h | 13 ++++++++ drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 2 +- 6 files changed, 81 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index ef7adac3764d71cceeea929778f7eb4f83531858..287cfc53294169cf5b75375105a= bc3c8c2d2a551 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -970,7 +970,44 @@ int iris_set_flip(struct iris_inst *inst, enum platfor= m_inst_fw_cap_type cap_id) &hfi_val, sizeof(u32)); } =20 -int iris_set_ir_period(struct iris_inst *inst, enum platform_inst_fw_cap_t= ype cap_id) +int iris_set_ir_period_gen1(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + struct v4l2_pix_format_mplane *fmt =3D &inst->fmt_dst->fmt.pix_mp; + u32 codec_align =3D inst->codec =3D=3D V4L2_PIX_FMT_HEVC ? 32 : 16; + u32 ir_period =3D inst->fw_caps[cap_id].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + struct hfi_intra_refresh hfi_val; + + if (!ir_period) + return -EINVAL; + + if (inst->fw_caps[IR_TYPE].value =3D=3D + V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM) { + hfi_val.mode =3D HFI_INTRA_REFRESH_RANDOM; + } else if (inst->fw_caps[IR_TYPE].value =3D=3D + V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC) { + hfi_val.mode =3D HFI_INTRA_REFRESH_CYCLIC; + } else { + return -EINVAL; + } + + /* + * Calculate the number of macroblocks in a frame, + * then determine how many macroblocks need to be + * refreshed within one ir_period. + */ + hfi_val.mbs =3D (fmt->width / codec_align) * (fmt->height / codec_align); + hfi_val.mbs /=3D ir_period; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_STRUCTURE, + &hfi_val, sizeof(hfi_val)); +} + +int iris_set_ir_period_gen2(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id) { const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; struct vb2_queue *q =3D v4l2_m2m_get_dst_vq(inst->m2m_ctx); diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/= platform/qcom/iris/iris_ctrls.h index 9518803577bc39f5c1339a49878dd0c3e8f510ad..a0d5338bdc910bd30407132e8b7= 00c333ad74e4c 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.h +++ b/drivers/media/platform/qcom/iris/iris_ctrls.h @@ -34,7 +34,8 @@ int iris_set_frame_qp(struct iris_inst *inst, enum platfo= rm_inst_fw_cap_type cap int iris_set_qp_range(struct iris_inst *inst, enum platform_inst_fw_cap_ty= pe cap_id); int iris_set_rotation(struct iris_inst *inst, enum platform_inst_fw_cap_ty= pe cap_id); int iris_set_flip(struct iris_inst *inst, enum platform_inst_fw_cap_type c= ap_id); -int iris_set_ir_period(struct iris_inst *inst, enum platform_inst_fw_cap_t= ype cap_id); +int iris_set_ir_period_gen1(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id); +int iris_set_ir_period_gen2(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id); int iris_set_properties(struct iris_inst *inst, u32 plane); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen1.c index 60f51a1ba9412d5c0a34b8b911ba53c69b236b10..9344d20042fd4dd5ed123463a93= 188f36efbd137 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c @@ -224,6 +224,25 @@ static const struct platform_inst_fw_cap inst_fw_cap_s= m8250_enc[] =3D { .flags =3D CAP_FLAG_OUTPUT_PORT, .set =3D iris_set_qp_range, }, + { + .cap_id =3D IR_TYPE, + .min =3D V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM, + .max =3D V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC, + .step_or_mask =3D BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RAND= OM) | + BIT(V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_CYCLIC), + .value =3D V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE_RANDOM, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, + }, + { + .cap_id =3D IR_PERIOD, + .min =3D 0, + .max =3D ((4096 * 2304) >> 8), + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROPERTY_PARAM_VENC_INTRA_REFRESH, + .flags =3D CAP_FLAG_OUTPUT_PORT, + .set =3D iris_set_ir_period_gen1, + }, }; =20 static const u32 sm8250_vdec_input_config_param_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 83373862655f7b78b8b698117a7d2fee00b6405e..051ba0d157c77263ea57b15296c= 86f61629621de 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -687,6 +687,14 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_s= ession_set_property_pkt *p packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*plane_actual_info); break; } + case HFI_PROPERTY_PARAM_VENC_INTRA_REFRESH: { + struct hfi_intra_refresh *in =3D pdata, *intra_refresh =3D prop_data; + + intra_refresh->mode =3D in->mode; + intra_refresh->mbs =3D in->mbs; + packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*intra_refresh); + break; + } default: return -EINVAL; } diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_defines.h index 42226ccee3d9b9eb5f793c3be127acd8afad2138..04c79ee0463d7f32a2042044fe4= 564718cc01561 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h @@ -139,6 +139,14 @@ #define HFI_PROPERTY_PARAM_VENC_H264_DEBLOCK_CONTROL 0x2005003 #define HFI_PROPERTY_PARAM_VENC_RATE_CONTROL 0x2005004 #define HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE_V2 0x2005009 + +#define HFI_INTRA_REFRESH_NONE 0x1 +#define HFI_INTRA_REFRESH_CYCLIC 0x2 +#define HFI_INTRA_REFRESH_ADAPTIVE 0x3 +#define HFI_INTRA_REFRESH_CYCLIC_ADAPTIVE 0x4 +#define HFI_INTRA_REFRESH_RANDOM 0x5 + +#define HFI_PROPERTY_PARAM_VENC_INTRA_REFRESH 0x200500d #define HFI_PROPERTY_PARAM_VENC_MAX_NUM_B_FRAMES 0x2005020 #define HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE 0x2006001 #define HFI_PROPERTY_CONFIG_VENC_SYNC_FRAME_SEQUENCE_HEADER 0x2006008 @@ -447,6 +455,11 @@ struct hfi_framerate { u32 framerate; }; =20 +struct hfi_intra_refresh { + u32 mode; + u32 mbs; +}; + struct hfi_event_data { u32 error; u32 height; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen2.c index ce8490d64854c6a3150f6baa3f1958150030de07..401519fef0e2e87152e3c7fd708= 0490e9659d60d 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c @@ -713,7 +713,7 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm= 8550_enc[] =3D { .value =3D 0, .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, - .set =3D iris_set_ir_period, + .set =3D iris_set_ir_period_gen2, }, }; =20 --=20 2.43.0 From nobody Fri Jun 12 22:33:08 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 56D3339EF0C for ; Tue, 12 May 2026 08:55:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576138; cv=none; b=rOuNf9AM0J2iRu1BtBzknKd50DCCZWXpRSwaAIH6Wg5IwcOy3/1E/1BFURuSjKDDPwx0RHNf2wZg6g42XibzNpy9qlS5e62hQdZ/s5aRraf3q1hKYz820mXv8NcegzQ4tdH9oRcaUtKCfLVCRm9hd7kAf9a8kkzPPqpm5BLIuHw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576138; c=relaxed/simple; bh=+jjoLi1geBfonyp8XtU8nugaD1xkWUl8LpP38hNPSFc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q4IGs0nKJbqTSPUNRbwrfxDLFX+YB5NE0+1ZNQXHRYiaRTYyD5HpBIQCVkNb+SFRvBxwGm80aqrc8/uqDt/N1lGQd1ug6C4JwXYDuFyDbpi0wB2e1PovnrmHx6hX8K0P0Wuji2zbp2FaOy/J6AcKfecVV6QbqffEWvh/lRXy8Y4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=KYytrwek; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Vh/QPyMR; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="KYytrwek"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Vh/QPyMR" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64C5Bdf31183975 for ; Tue, 12 May 2026 08:55:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 4Pp4q+m9WiUalNcrg6WYFPWfAjzQPqHJBOyGjHc4AB4=; b=KYytrwekau/+2RgR 4DHEfb0LYadI6jFJInn7pRiGhTNcPXq05987kOCdwPHoJF9Zze5wYCqUFNP6IeOZ P6p69cQmIwYFs1bC1LY+8YZ3czrZd+iHlQdBlMu8hiZNAnTUbGHFX9arnlGtjnW8 HpkeChfSfZyCxywC0aK2nmIMr5TshPojFFIGv9LUy2iolX7A3wk6Tf/hLo6jKaP/ NWS+6Kv6BnHRGVxI/CdDNN4Cv6spVdJZ688IlSQZeedZV4ujM4jahUvn57cBVL4P brbzVI7863FiZZpcdgbbkw19FpKmlz3eUXaxG5A/nG8zgpNABuECAiL7tTo9ZipT fD7rSg== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e3nuyab5x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 08:55:28 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2baedd2fd43so32334875ad.1 for ; Tue, 12 May 2026 01:55:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778576127; x=1779180927; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=4Pp4q+m9WiUalNcrg6WYFPWfAjzQPqHJBOyGjHc4AB4=; b=Vh/QPyMRlTIt/Rp841EHQT9pc5yWqw6MlVzWq67NHKDhiLIycbCVOiGlT9rkOB9+3+ yQDt7nKZmSS8dtJWKjU2VyEMqJLkwszre4lu41cMwSu9D/O7mHnl+fyJDZZntYaL1XIp p6uY9TQKgwo5WJRXBGxNZtahRYv+Oj/8pi2EPGXHsXb7rcZZF+CWGK8NfvtCH+Gj+IS3 WgznzI28reNbfEltsgpbcwmuErpGANxQe++yL+I6heQRKSSnEURX16QwUmakxl20ogHp 4QXJ6m4yUKoVswqte/gZV9zrz3C/XePpUDpWqk6Buu0BhzHxlwbBXBdT+aB00b1T1Ici uIgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778576127; x=1779180927; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=4Pp4q+m9WiUalNcrg6WYFPWfAjzQPqHJBOyGjHc4AB4=; b=YJ8ue58oQSCLSJB1tCR7uFVTrP2WpmJXex47A8eD2CvqvJaRu5VSZKOMLTy9150tuE YK+ElExPt7E7MF6xO4DFQB3vqFgFcyQK4Kiq4rgpa40ZfEJ4ZWYq+1eD8qFaQ81IPj8a 5DfnWN5g3TL+wakgzumgemOiiTn+zj51m/1B3LnE4m2Iq36BR97wIqokSrGkjphH7MWE SJYMlU/U/83mLPS8RCiWnfy5UdnSpIT6NnsDB+aNLrWMElJfP9GbOMf+zXEDcniKPPWr LLv79rzxHeqLMxLN9MEgxusCYIoRYtVKaUUTawOQl7eEsAmM3cBPavLBTQc2jOS7VM0z rDSw== X-Forwarded-Encrypted: i=1; AFNElJ+RIZZxboyUwD05hs4bN/eXrVeu1Ghx1kG6763VsLtajSSgou5af+bBCgeqFCcCemtwP353rkbxTXocHbI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/ivWT6eWv8jz/6wkM8IM8D5EQwWy0cKfGm+bNit1fR3QQ74df CYK3aQh2Hce8br0egA0hZ9YokQLjUAh+qxPSWKJ+gQ7CzSbHmb0CM4aSE7KeuDguAf9DC55cDF3 r70GXb9fNu9ryMFLd7nNq3/RSr//sK2IDwjQmWGmlKzOciMSo7QDFCvHDkkVJA448M+I= X-Gm-Gg: Acq92OFz4RZt9io+Dcf6cZzUegbWnRaEQCjDU/xERDHGjYcK4vbx1G/LSUZoMNejyOF 5prZid3LRCx1JOax/LBoeFfBR91qXKZP7BsVYgvf98zP6VpuPW/ezVypkzfqaqRLq5kSVx35MAk USbGwZt1owbdg3OLJKnJ2jgbG8OA+K7W9R8tmtuRJ4ukeilsKUw9rO5Cmxv72KErrh5MPWwseWG DLVibYYE7NloLh2PHtS+AaJl5u1PHNk57E1bL4yhUogrkem3kGtfGjE6js5eIk6c3vrKmRbf/Am T3AStDq/ovKQOaLsssVq1iX0scPJLdbPeZptOpFxb5RE7PynOwBbhnFRmv8tUscwvL46+WnFFQo gT/On8nWfRRfDSyTDmI7ToapShMaKxSI03+7QuQoP3y2HllmFVEV5AvVEUkABgBcD5JOwzZnmLM q2J22Da8wMD2626e0nJcYV X-Received: by 2002:a17:902:e790:b0:2ba:bfc:76b5 with SMTP id d9443c01a7336-2ba78b40166mr289281145ad.4.1778576126961; Tue, 12 May 2026 01:55:26 -0700 (PDT) X-Received: by 2002:a17:902:e790:b0:2ba:bfc:76b5 with SMTP id d9443c01a7336-2ba78b40166mr289280845ad.4.1778576126347; Tue, 12 May 2026 01:55:26 -0700 (PDT) Received: from WANGAOW-LAB01.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm127641405ad.66.2026.05.12.01.55.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 01:55:25 -0700 (PDT) From: Wangao Wang Date: Tue, 12 May 2026 16:55:11 +0800 Subject: [PATCH v7 2/6] media: qcom: iris: Add Long-Term Reference support for encoder Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-batch2_features-v7-2-4954e3b4df84@oss.qualcomm.com> References: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> In-Reply-To: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Wangao Wang , Neil Armstrong X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778576115; l=16362; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=+jjoLi1geBfonyp8XtU8nugaD1xkWUl8LpP38hNPSFc=; b=NvAFYvpXRwOBda1gPLPkE7VO+X+NWuMTNZZ6qu7XzpBWN5Rc6JTOu6+YbqHJx2Kf9DHzKyTVc 7EQYJ1Zt/KkADBZLXQN5Wdu9U2UmQ0/G077WFxrNIMc2q43QJFCPNaD X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Proofpoint-ORIG-GUID: blJM1sPlXMKj7m3PMbhIKgwm4ftV8wuo X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDA5MCBTYWx0ZWRfX+MJecCVgF1om rLysIE0ZQ2sSeN8T/zRTKDBxnSwrA+PUermZE0451sC3OxUjQ+EN+6vMabWI6bKFND3W7KJqk84 xsSGptuI3jyzCO829ocggCesaIW5LGWmQ+ijmf7MBdho9eRB9KMBtmN3O6e/TRUd1JFrGCjkciZ gB7c1iWkzo3jPEeXxffdpBptG3zVKazNFfu4TEweacI9phHvH6GZ71nIzMmnQso/WviqePcyweO U0nrq39QAqY9hwlN3bS/JtO5EGLAsinZRqTJUVBYj2SSmCUorIcOmWjVBW/MXsGdA/izbkKXmH9 o+yteQa5dwXcmdbnk9St5hHZUxDjvrfeXYqHVbJShGz5iziW6OTQ0D9/zamc6vAXTMrbuOGfaaY WPv03RzdJtEzJqptiE7cbKomwUxob4fxtQnNEUF9L3cgmak7h8YIKBp0hYs98+Q8jsjlNG41Mr5 nTWDfVnvZFA00cROk6A== X-Authority-Analysis: v=2.4 cv=UZ5hjqSN c=1 sm=1 tr=0 ts=6a02eb00 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=QunbDvX0_-zBgmAapgUA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: blJM1sPlXMKj7m3PMbhIKgwm4ftV8wuo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 suspectscore=0 bulkscore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120090 Add Long-Term Reference(LTR) frame support for both gen1 and gen2 encoders by enabling the following V4L2 controls: V4L2_CID_MPEG_VIDEO_LTR_COUNT V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX Tested-by: Neil Armstrong # on SM8650-HDK Reviewed-by: Dikshita Agarwal Signed-off-by: Wangao Wang --- drivers/media/platform/qcom/iris/iris_ctrls.c | 128 +++++++++++++++++= ++++ drivers/media/platform/qcom/iris/iris_ctrls.h | 5 + drivers/media/platform/qcom/iris/iris_hfi_gen1.c | 30 +++++ .../platform/qcom/iris/iris_hfi_gen1_command.c | 25 ++++ .../platform/qcom/iris/iris_hfi_gen1_defines.h | 24 ++++ drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 30 +++++ .../platform/qcom/iris/iris_hfi_gen2_defines.h | 3 + .../platform/qcom/iris/iris_platform_common.h | 6 + drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 20 +++- 9 files changed, 267 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index 287cfc53294169cf5b75375105abc3c8c2d2a551..87d10ce1a9a572c5242d425b5a0= 2abba01f911b5 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -112,6 +112,12 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(= u32 id) return IR_TYPE; case V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD: return IR_PERIOD; + case V4L2_CID_MPEG_VIDEO_LTR_COUNT: + return LTR_COUNT; + case V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES: + return USE_LTR; + case V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX: + return MARK_LTR; default: return INST_FW_CAP_MAX; } @@ -213,6 +219,12 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_= type cap_id) return V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD_TYPE; case IR_PERIOD: return V4L2_CID_MPEG_VIDEO_INTRA_REFRESH_PERIOD; + case LTR_COUNT: + return V4L2_CID_MPEG_VIDEO_LTR_COUNT; + case USE_LTR: + return V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES; + case MARK_LTR: + return V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX; default: return 0; } @@ -1033,6 +1045,122 @@ int iris_set_ir_period_gen2(struct iris_inst *inst,= enum platform_inst_fw_cap_ty &ir_period, sizeof(u32)); } =20 +int iris_set_ltr_count_gen1(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + u32 ltr_count =3D inst->fw_caps[cap_id].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + struct hfi_ltr_mode ltr_mode; + + if (!ltr_count) + return -EINVAL; + + ltr_mode.count =3D ltr_count; + ltr_mode.mode =3D HFI_LTR_MODE_MANUAL; + ltr_mode.trust_mode =3D 1; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_STRUCTURE, + <r_mode, sizeof(ltr_mode)); +} + +int iris_set_use_ltr(struct iris_inst *inst, enum platform_inst_fw_cap_typ= e cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + struct vb2_queue *sq =3D v4l2_m2m_get_src_vq(inst->m2m_ctx); + struct vb2_queue *dq =3D v4l2_m2m_get_dst_vq(inst->m2m_ctx); + u32 ltr_count =3D inst->fw_caps[LTR_COUNT].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + struct hfi_ltr_use ltr_use; + + if (!vb2_is_streaming(sq) && !vb2_is_streaming(dq)) + return -EINVAL; + + if (!ltr_count) + return -EINVAL; + + ltr_use.ref_ltr =3D inst->fw_caps[cap_id].value; + ltr_use.use_constrnt =3D true; + ltr_use.frames =3D 0; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_STRUCTURE, + <r_use, sizeof(ltr_use)); +} + +int iris_set_mark_ltr(struct iris_inst *inst, enum platform_inst_fw_cap_ty= pe cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + struct vb2_queue *sq =3D v4l2_m2m_get_src_vq(inst->m2m_ctx); + struct vb2_queue *dq =3D v4l2_m2m_get_dst_vq(inst->m2m_ctx); + u32 ltr_count =3D inst->fw_caps[LTR_COUNT].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + struct hfi_ltr_mark ltr_mark; + + if (!vb2_is_streaming(sq) && !vb2_is_streaming(dq)) + return -EINVAL; + + if (!ltr_count) + return -EINVAL; + + ltr_mark.mark_frame =3D inst->fw_caps[cap_id].value; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_STRUCTURE, + <r_mark, sizeof(ltr_mark)); +} + +int iris_set_ltr_count_gen2(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + u32 ltr_count =3D inst->fw_caps[cap_id].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + + if (!ltr_count) + return -EINVAL; + + if (inst->hfi_rc_type =3D=3D HFI_RC_CBR_VFR || + inst->hfi_rc_type =3D=3D HFI_RC_CBR_CFR || + inst->hfi_rc_type =3D=3D HFI_RC_OFF) { + inst->fw_caps[LTR_COUNT].value =3D 0; + return -EINVAL; + } + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_U32, + <r_count, sizeof(u32)); +} + +int iris_set_use_and_mark_ltr(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + struct vb2_queue *sq =3D v4l2_m2m_get_src_vq(inst->m2m_ctx); + struct vb2_queue *dq =3D v4l2_m2m_get_dst_vq(inst->m2m_ctx); + u32 ltr_count =3D inst->fw_caps[LTR_COUNT].value; + u32 hfi_val =3D inst->fw_caps[cap_id].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + + if (!vb2_is_streaming(sq) && !vb2_is_streaming(dq)) + return -EINVAL; + + if (!ltr_count || hfi_val =3D=3D INVALID_DEFAULT_MARK_OR_USE_LTR) + return -EINVAL; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_U32, + &hfi_val, sizeof(u32)); +} + int iris_set_properties(struct iris_inst *inst, u32 plane) { const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/= platform/qcom/iris/iris_ctrls.h index a0d5338bdc910bd30407132e8b700c333ad74e4c..996c83fdc6f492dc252771129fc= 1d62e8b7a7e07 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.h +++ b/drivers/media/platform/qcom/iris/iris_ctrls.h @@ -36,6 +36,11 @@ int iris_set_rotation(struct iris_inst *inst, enum platf= orm_inst_fw_cap_type cap int iris_set_flip(struct iris_inst *inst, enum platform_inst_fw_cap_type c= ap_id); int iris_set_ir_period_gen1(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id); int iris_set_ir_period_gen2(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id); +int iris_set_ltr_count_gen1(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id); +int iris_set_ltr_count_gen2(struct iris_inst *inst, enum platform_inst_fw_= cap_type cap_id); +int iris_set_use_ltr(struct iris_inst *inst, enum platform_inst_fw_cap_typ= e cap_id); +int iris_set_mark_ltr(struct iris_inst *inst, enum platform_inst_fw_cap_ty= pe cap_id); +int iris_set_use_and_mark_ltr(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id); int iris_set_properties(struct iris_inst *inst, u32 plane); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen1.c index 9344d20042fd4dd5ed123463a93188f36efbd137..6db693a602aca296f032dfc3198= 7071f8e15bd1c 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c @@ -243,6 +243,36 @@ static const struct platform_inst_fw_cap inst_fw_cap_s= m8250_enc[] =3D { .flags =3D CAP_FLAG_OUTPUT_PORT, .set =3D iris_set_ir_period_gen1, }, + { + .cap_id =3D LTR_COUNT, + .min =3D 0, + .max =3D MAX_LTR_FRAME_COUNT_GEN1, + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROPERTY_PARAM_VENC_LTRMODE, + .flags =3D CAP_FLAG_OUTPUT_PORT, + .set =3D iris_set_ltr_count_gen1, + }, + { + .cap_id =3D USE_LTR, + .min =3D 0, + .max =3D ((1 << MAX_LTR_FRAME_COUNT_GEN1) - 1), + .step_or_mask =3D 0, + .value =3D 0, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_USELTRFRAME, + .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_use_ltr, + }, + { + .cap_id =3D MARK_LTR, + .min =3D 0, + .max =3D (MAX_LTR_FRAME_COUNT_GEN1 - 1), + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_MARKLTRFRAME, + .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_mark_ltr, + }, }; =20 static const u32 sm8250_vdec_input_config_param_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 051ba0d157c77263ea57b15296c86f61629621de..a441c897aaabdf1ecae37d34032= cd22d4f987233 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -695,6 +695,31 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_s= ession_set_property_pkt *p packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*intra_refresh); break; } + case HFI_PROPERTY_PARAM_VENC_LTRMODE: { + struct hfi_ltr_mode *in =3D pdata, *ltr_mode =3D prop_data; + + ltr_mode->mode =3D in->mode; + ltr_mode->count =3D in->count; + ltr_mode->trust_mode =3D in->trust_mode; + packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*ltr_mode); + break; + } + case HFI_PROPERTY_CONFIG_VENC_USELTRFRAME: { + struct hfi_ltr_use *in =3D pdata, *ltr_use =3D prop_data; + + ltr_use->frames =3D in->frames; + ltr_use->ref_ltr =3D in->ref_ltr; + ltr_use->use_constrnt =3D in->use_constrnt; + packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*ltr_use); + break; + } + case HFI_PROPERTY_CONFIG_VENC_MARKLTRFRAME: { + struct hfi_ltr_mark *in =3D pdata, *ltr_mark =3D prop_data; + + ltr_mark->mark_frame =3D in->mark_frame; + packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*ltr_mark); + break; + } default: return -EINVAL; } diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_defines.h index 04c79ee0463d7f32a2042044fe4564718cc01561..34249fc0d047918c2463517b830= 3e30df3666b97 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h @@ -147,8 +147,16 @@ #define HFI_INTRA_REFRESH_RANDOM 0x5 =20 #define HFI_PROPERTY_PARAM_VENC_INTRA_REFRESH 0x200500d + +#define HFI_LTR_MODE_DISABLE 0x0 +#define HFI_LTR_MODE_MANUAL 0x1 +#define HFI_LTR_MODE_PERIODIC 0x2 + +#define HFI_PROPERTY_PARAM_VENC_LTRMODE 0x200501c #define HFI_PROPERTY_PARAM_VENC_MAX_NUM_B_FRAMES 0x2005020 #define HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE 0x2006001 +#define HFI_PROPERTY_CONFIG_VENC_MARKLTRFRAME 0x2006009 +#define HFI_PROPERTY_CONFIG_VENC_USELTRFRAME 0x200600a #define HFI_PROPERTY_CONFIG_VENC_SYNC_FRAME_SEQUENCE_HEADER 0x2006008 =20 struct hfi_pkt_hdr { @@ -460,6 +468,22 @@ struct hfi_intra_refresh { u32 mbs; }; =20 +struct hfi_ltr_mode { + u32 mode; + u32 count; + u32 trust_mode; +}; + +struct hfi_ltr_use { + u32 ref_ltr; + u32 use_constrnt; + u32 frames; +}; + +struct hfi_ltr_mark { + u32 mark_frame; +}; + struct hfi_event_data { u32 error; u32 height; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen2.c index 401519fef0e2e87152e3c7fd7080490e9659d60d..495327160ec292f5fdc8f953205= 4c58046a10250 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c @@ -715,6 +715,36 @@ static const struct platform_inst_fw_cap inst_fw_cap_s= m8550_enc[] =3D { CAP_FLAG_DYNAMIC_ALLOWED, .set =3D iris_set_ir_period_gen2, }, + { + .cap_id =3D LTR_COUNT, + .min =3D 0, + .max =3D MAX_LTR_FRAME_COUNT_GEN2, + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROP_LTR_COUNT, + .flags =3D CAP_FLAG_OUTPUT_PORT, + .set =3D iris_set_ltr_count_gen2, + }, + { + .cap_id =3D USE_LTR, + .min =3D 0, + .max =3D ((1 << MAX_LTR_FRAME_COUNT_GEN2) - 1), + .step_or_mask =3D 0, + .value =3D 0, + .hfi_id =3D HFI_PROP_LTR_USE, + .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_use_and_mark_ltr, + }, + { + .cap_id =3D MARK_LTR, + .min =3D INVALID_DEFAULT_MARK_OR_USE_LTR, + .max =3D (MAX_LTR_FRAME_COUNT_GEN2 - 1), + .step_or_mask =3D 1, + .value =3D INVALID_DEFAULT_MARK_OR_USE_LTR, + .hfi_id =3D HFI_PROP_LTR_MARK, + .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_use_and_mark_ltr, + }, }; =20 static const u32 sm8550_vdec_input_config_params_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_defines.h index cecf771c55dd36a13616344ff4583bf1d0544e17..aec19efc41a5ef47bbad2471d3c= 4575704859743 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h @@ -71,6 +71,9 @@ enum hfi_rate_control { #define HFI_PROP_MIN_QP_PACKED 0x0300012f #define HFI_PROP_MAX_QP_PACKED 0x03000130 #define HFI_PROP_IR_RANDOM_PERIOD 0x03000131 +#define HFI_PROP_LTR_COUNT 0x03000134 +#define HFI_PROP_LTR_MARK 0x03000135 +#define HFI_PROP_LTR_USE 0x03000136 #define HFI_PROP_TOTAL_BITRATE 0x0300013b #define HFI_PROP_MAX_GOP_FRAMES 0x03000146 #define HFI_PROP_MAX_B_FRAMES 0x03000147 diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 6a108173be3548af9868697c2557e353136d147d..2f4392e6a42ea9280d48ae46791= 277394b2f3be8 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -28,6 +28,9 @@ struct iris_inst; #define MAX_QP_HEVC 63 #define DEFAULT_QP 20 #define BITRATE_DEFAULT 20000000 +#define INVALID_DEFAULT_MARK_OR_USE_LTR -1 +#define MAX_LTR_FRAME_COUNT_GEN1 4 +#define MAX_LTR_FRAME_COUNT_GEN2 2 =20 enum stage_type { STAGE_1 =3D 1, @@ -151,6 +154,9 @@ enum platform_inst_fw_cap_type { VFLIP, IR_TYPE, IR_PERIOD, + LTR_COUNT, + USE_LTR, + MARK_LTR, INST_FW_CAP_MAX, }; =20 diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index 9270422c16019ba658ee8813940cb9110ad030a1..891aed5091c7a0fd0bf1f1a3a77= 37d49e6d8cea2 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -934,6 +934,19 @@ static u32 iris_vpu_enc_bin_size(struct iris_inst *ins= t) num_vpp_pipes, inst->hfi_rc_type); } =20 +static inline u32 hfi_buffer_get_recon_count(struct iris_inst *inst) +{ + u32 num_ref =3D 1; + u32 ltr_count; + + ltr_count =3D inst->fw_caps[LTR_COUNT].value; + + if (ltr_count) + num_ref =3D num_ref + ltr_count; + + return num_ref; +} + static u32 iris_vpu_dec_partial_size(struct iris_inst *inst) { struct v4l2_format *f =3D inst->fmt_src; @@ -968,7 +981,7 @@ static u32 iris_vpu_enc_comv_size(struct iris_inst *ins= t) { u32 height =3D iris_vpu_enc_get_bitstream_height(inst); u32 width =3D iris_vpu_enc_get_bitstream_width(inst); - u32 num_recon =3D 1; + u32 num_recon =3D hfi_buffer_get_recon_count(inst); u32 lcu_size =3D 16; =20 if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) { @@ -1677,10 +1690,9 @@ static u32 iris_vpu_enc_scratch2_size(struct iris_in= st *inst) { u32 frame_height =3D iris_vpu_enc_get_bitstream_height(inst); u32 frame_width =3D iris_vpu_enc_get_bitstream_width(inst); - u32 num_ref =3D 1; + u32 num_ref =3D hfi_buffer_get_recon_count(inst); =20 - return hfi_buffer_scratch2_enc(frame_width, frame_height, num_ref, - false); + return hfi_buffer_scratch2_enc(frame_width, frame_height, num_ref, false); } =20 static u32 iris_vpu_enc_vpss_size(struct iris_inst *inst) --=20 2.43.0 From nobody Fri Jun 12 22:33:08 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 755BE37EFFF for ; Tue, 12 May 2026 08:55:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576141; cv=none; b=tqfoIv8kzgpdppyFo3LlztF+ZoFIfBXMYUvsVW67BZAi6/PIomhmOS9cFS8iCrvc98YylWHKsoEDnNXdchAW/JBUE9bg5+4n2iDNwMvc7ynEHZqcJCGxn+e0VX+Ynv/440+Y7/4m0nrGSW52Sx3es0bkrUqThSkMZgSIDNr2auQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576141; c=relaxed/simple; bh=+7NxkDI2Wh2+EYMc/jv7ryzxTAD6z+OSvF6pX5Ho7E4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IET3pofbgkTOv9DvCvlhjEuY4MPQWyVaN1P0yvbzr5IJb4Iebry6MmBTCNRsWdWDFpLXPjefVCg7CJNmyHNnsPORiDTE4GxptEYT/Jl2eufjIh1jDgQv+Z0tMxJjZafcyXKkuccg6vze9/viw9BtRVGPHpdyFNfLiDe4BXuTDJw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=UHlAJrpL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=e38z64Xb; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="UHlAJrpL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="e38z64Xb" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64C5ZsoG2202251 for ; Tue, 12 May 2026 08:55:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= HX4c23/7ZwwNO0ZK16Oy/pJUBGqNwomA2SAB8l6pqCo=; b=UHlAJrpLvsvIMCD7 o9/ZkKiGetlidzFhHbm96WKl+23ovsSZ2RfrBw9i3hwAu4RHQPa1v0zFBTYZQCA5 9O0lGzyy/rYHzOegYY/9WoZVRLRs+lQMCQ7zNfOABdq2Bus+280Ht1Tc1gyArxEf oy1GWuZFQkceHPLwxbBLxBA4A7OfWAyEY6mn1oXWBvsJfOklVN4naIbOkYNmBq91 f1dTfsW7OHD5S872z0FJPDlZT+p0pdYoSvDBWxYr+Qy5leUZM5UZp60wmMtUCkWs /pViBoy5XIxIRn/OZqifZcrqhfglg+j6PBBtNLZK6BUsEKmU3gGAt02RjPJ3e260 pt65yg== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e3nuyjaew-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 08:55:31 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2b4654f9bb6so57232295ad.2 for ; Tue, 12 May 2026 01:55:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778576131; x=1779180931; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=HX4c23/7ZwwNO0ZK16Oy/pJUBGqNwomA2SAB8l6pqCo=; b=e38z64XbzveTi0l/hNwh3oXJUCVAsPnPUqyXHSs2AgDYKv/BDC0xoPLenBs3LT4XzL ZRnW6KUw3+PfrvZ2E87aBQdDJUAJ3gP7uLSYKAfMqfHHUGCc+6Ak2SXAPqvtuGmMqCzG ikVhcqsEYCrq9buE5avYM68ODFzowDR3VWEHCW/v6pLOMTGoUlLd8mNV2EueKaAvL7H6 w/H2VcSODyf/I1CxX+gEdEpZ/Vjb+ZvLy//sZRK6FWvO2ot7XDls3FW/Co2LBMugg1jt +huupqKUl8eYZqQdfVGbkmka8Qe6mKcx/p7ETotviaZlHEugfjfRIl+A0NMhAYcKX12l L3HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778576131; x=1779180931; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=HX4c23/7ZwwNO0ZK16Oy/pJUBGqNwomA2SAB8l6pqCo=; b=cKVk5PE/HQdBAdla25yl1VklWutMa4wmmjn6Xh5fKCTEBTArRCxPQN+jzBCZDCjn23 GQykyv1VQKDHz2dwmv/oWd/5h8vOG43MgZ9brt0IVMLYsFNr+CvOrbjKBq+oFt1mkVxp vXQNR4XIwIq0113opqTdgmiHST+uOvYwUiaEiV3BDrRSR037mMtVQIEp4UKAYLRbulmj fZ86/xo8WF1/aSHyUPXyI79Q7yhvbmT0wK027k3k3/kk3+EmzcT0KWY2QMdQJiAjp7tP oOl0QLIqGKKVuojL82XacRbLUnRVAwecrppT0i+MyyZgF8LSl6mPxEqaljK43VzxTUmZ xOGg== X-Forwarded-Encrypted: i=1; AFNElJ/9fQHtPX3nlUvTR4SqobtCdKlw9go+rDaHIvscC8DlZQEdpQlbQstfM9WOPk4Syo7I+tEx16TV7nkiZUk=@vger.kernel.org X-Gm-Message-State: AOJu0YyKZw/QSQa8AGkTOyzjgKKrTX+vfxXhqru0D+7Q3NL+UX9yh0lr hDA/sZDLGARVlOi0RsxuOhG5yrCwPXO/zwshK/PihpGQaBVL4vrMUW8bhPHNDi4cQE8IYrXrT79 eX0mQObcbpOEztkrbU5QxK1ZM8RBHGOHkqrKwPU30eIMmMoiyBsdDlr715/2E9mdKzss= X-Gm-Gg: Acq92OGzkD3Ni81D1KrHm3IKcB6mTEQQ5ziDnOB6SZMCk3Sm1Z8IdpCHcIUmU4AEdN8 futv6iquBxiR+dFFI4liTmFtA+U1s6BK8+mdzkLK7MZaN8/gf253LzURi5ntBA+JFVdJePBjKA2 HNcmHdP/gdGiOzfvHs/Y9mLV/wwsNM6DCRNBkZRrJxV6OAsLif0GCk/1CGeLuWa25P4zCgSXR7p uT/5+NkeHUarPeR5lHwxB/2Esz2pGK/E92NQJmP3534Yxl+MjoRyxF/c0ALxJ1eZUXmK3sd3Us4 E7b6avy4D/IToaKXkf0GCehH78xI2Fce2TMRlYHs9KCBZAk0YeIJMqzHw5Y0UdlHLPQGfVtTOBu jLxMrlDUIwloSRGRORulHc+7YGmZG1Z2Mulw2eQoXVJLTfzEq+3ck02fBlNYoHpi57xXykKoRHB Ks4JV2LM8bqrOf32i68t/8 X-Received: by 2002:a17:902:c401:b0:2bc:ffe1:c397 with SMTP id d9443c01a7336-2bcffe1c5eemr29304565ad.23.1778576130608; Tue, 12 May 2026 01:55:30 -0700 (PDT) X-Received: by 2002:a17:902:c401:b0:2bc:ffe1:c397 with SMTP id d9443c01a7336-2bcffe1c5eemr29304165ad.23.1778576129966; Tue, 12 May 2026 01:55:29 -0700 (PDT) Received: from WANGAOW-LAB01.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm127641405ad.66.2026.05.12.01.55.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 01:55:29 -0700 (PDT) From: Wangao Wang Date: Tue, 12 May 2026 16:55:12 +0800 Subject: [PATCH v7 3/6] media: qcom: iris: Add B frames support for encoder Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-batch2_features-v7-3-4954e3b4df84@oss.qualcomm.com> References: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> In-Reply-To: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Wangao Wang , Neil Armstrong X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778576115; l=8797; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=+7NxkDI2Wh2+EYMc/jv7ryzxTAD6z+OSvF6pX5Ho7E4=; b=VtQhII1q2xKZOpwcdORQZTimCLeP6SCLCSRkfwMTYoUx+4PHpT2rawYk6zpapMdRe0nVOUbbv OGeS4GJUF+RAGoq3HaCR7bZeQrVD+uNj0pIhzZbod+m9eBRlhae/dS0 X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDA5MCBTYWx0ZWRfX1AN+B8vi/ETT MwEgnHI4182EdHdeOGcxCseVaFyN0YZxS7jWTTIQVUeq6Sq3YmWsMB2wVEx+4MkCeYHvRYtDS6l SAWWH/rOyxLEvH9RDoiWNQvO8aZtEmGFq+qCMCZ3kFbDqTWWAyJMgSNerM/RQ94PurIsVe0B6aI 6y6EFOa0hyvFQ2qojSThKjv3U6/xdRtmpkp4ea26QjrbMSap7rpO2SINlvjPOqR1cIE/i0qCtML uhTxwKwxSZ22B6OaGWvp0C2XADq+5LiXbfm8Wg3Hu8BFy9zgZw0v2LbLaosW/s9WSg0qprlCnbf vU5zCt3gPR82FV3hpaic/jWubnhdRBsR6HrH8IRXPYNg9E4Y3G65yc2M/wCV58w6PWId704UGMj kaMJkn6SzBlu4ZvA7kST+6pVXul39Xcw3DA4ljme2fgGpe6Y7bOSJiyfZM0Y2vqrSHWsE6lXwVC R7jOdsph9zjEJBKwFPw== X-Proofpoint-GUID: zNJN_sF0iyH3fnxye7kVOGooQXurczdr X-Proofpoint-ORIG-GUID: zNJN_sF0iyH3fnxye7kVOGooQXurczdr X-Authority-Analysis: v=2.4 cv=Y5XIdBeN c=1 sm=1 tr=0 ts=6a02eb03 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=2_V6wWdUOSEACiTAc7sA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 suspectscore=0 adultscore=0 phishscore=0 priorityscore=1501 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120090 Add support for B-frame configuration on both gen1 and gen2 encoders by enabling V4L2_CID_MPEG_VIDEO_B_FRAMES control. Reviewed-by: Dikshita Agarwal Tested-by: Neil Armstrong # on SM8650-HDK Signed-off-by: Wangao Wang --- drivers/media/platform/qcom/iris/iris_ctrls.c | 30 ++++++++++++++++++= ++++ drivers/media/platform/qcom/iris/iris_ctrls.h | 1 + drivers/media/platform/qcom/iris/iris_hfi_gen1.c | 18 +++++++++++++ .../platform/qcom/iris/iris_hfi_gen1_command.c | 8 ++++++ .../platform/qcom/iris/iris_hfi_gen1_defines.h | 10 ++++++++ drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 10 ++++++++ .../platform/qcom/iris/iris_platform_common.h | 2 ++ drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 6 ++++- 8 files changed, 84 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index 87d10ce1a9a572c5242d425b5a02abba01f911b5..a6bd2eada52b68afd91032315c2= 701d8c74a9763 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -118,6 +118,8 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(u= 32 id) return USE_LTR; case V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX: return MARK_LTR; + case V4L2_CID_MPEG_VIDEO_B_FRAMES: + return B_FRAME; default: return INST_FW_CAP_MAX; } @@ -225,6 +227,8 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_t= ype cap_id) return V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES; case MARK_LTR: return V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX; + case B_FRAME: + return V4L2_CID_MPEG_VIDEO_B_FRAMES; default: return 0; } @@ -1161,6 +1165,32 @@ int iris_set_use_and_mark_ltr(struct iris_inst *inst= , enum platform_inst_fw_cap_ &hfi_val, sizeof(u32)); } =20 +int iris_set_intra_period(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + u32 gop_size =3D inst->fw_caps[GOP_SIZE].value; + u32 b_frame =3D inst->fw_caps[B_FRAME].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + struct hfi_intra_period intra_period; + + if (!gop_size || b_frame >=3D gop_size) + return -EINVAL; + + /* + * intra_period represents the length of a GOP, which includes both P-fra= mes + * and B-frames. The counts of P-frames and B-frames within a GOP must be + * communicated to the firmware. + */ + intra_period.pframes =3D (gop_size - 1) / (b_frame + 1); + intra_period.bframes =3D b_frame; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_STRUCTURE, + &intra_period, sizeof(intra_period)); +} + int iris_set_properties(struct iris_inst *inst, u32 plane) { const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/= platform/qcom/iris/iris_ctrls.h index 996c83fdc6f492dc252771129fc1d62e8b7a7e07..609258c81517b71523b682ca994= 786cdd020b07f 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.h +++ b/drivers/media/platform/qcom/iris/iris_ctrls.h @@ -41,6 +41,7 @@ int iris_set_ltr_count_gen2(struct iris_inst *inst, enum = platform_inst_fw_cap_ty int iris_set_use_ltr(struct iris_inst *inst, enum platform_inst_fw_cap_typ= e cap_id); int iris_set_mark_ltr(struct iris_inst *inst, enum platform_inst_fw_cap_ty= pe cap_id); int iris_set_use_and_mark_ltr(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id); +int iris_set_intra_period(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id); int iris_set_properties(struct iris_inst *inst, u32 plane); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen1.c index 6db693a602aca296f032dfc31987071f8e15bd1c..792441463b4bad19da5a45b46c4= dafcf2caa75c3 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c @@ -273,6 +273,24 @@ static const struct platform_inst_fw_cap inst_fw_cap_s= m8250_enc[] =3D { .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, .set =3D iris_set_mark_ltr, }, + { + .cap_id =3D B_FRAME, + .min =3D 0, + .max =3D 3, + .step_or_mask =3D 1, + .value =3D 0, + .flags =3D CAP_FLAG_OUTPUT_PORT, + }, + { + .cap_id =3D INTRA_PERIOD, + .min =3D 0, + .max =3D 1, + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_INTRA_PERIOD, + .flags =3D CAP_FLAG_OUTPUT_PORT, + .set =3D iris_set_intra_period, + }, }; =20 static const u32 sm8250_vdec_input_config_param_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index a441c897aaabdf1ecae37d34032cd22d4f987233..05e7b5ff2b9224b201cf87858c0= 375ac6866e9bb 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -720,6 +720,14 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_s= ession_set_property_pkt *p packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*ltr_mark); break; } + case HFI_PROPERTY_CONFIG_VENC_INTRA_PERIOD: { + struct hfi_intra_period *in =3D pdata, *intra_period =3D prop_data; + + intra_period->pframes =3D in->pframes; + intra_period->bframes =3D in->bframes; + packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*intra_period); + break; + } default: return -EINVAL; } diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_defines.h index 34249fc0d047918c2463517b8303e30df3666b97..4343661e86065f5623b2c02c7ee= 808a3c47a8c41 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h @@ -155,6 +155,7 @@ #define HFI_PROPERTY_PARAM_VENC_LTRMODE 0x200501c #define HFI_PROPERTY_PARAM_VENC_MAX_NUM_B_FRAMES 0x2005020 #define HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE 0x2006001 +#define HFI_PROPERTY_CONFIG_VENC_INTRA_PERIOD 0x2006003 #define HFI_PROPERTY_CONFIG_VENC_MARKLTRFRAME 0x2006009 #define HFI_PROPERTY_CONFIG_VENC_USELTRFRAME 0x200600a #define HFI_PROPERTY_CONFIG_VENC_SYNC_FRAME_SEQUENCE_HEADER 0x2006008 @@ -484,6 +485,15 @@ struct hfi_ltr_mark { u32 mark_frame; }; =20 +struct hfi_max_num_b_frames { + u32 max_num_b_frames; +}; + +struct hfi_intra_period { + u32 pframes; + u32 bframes; +}; + struct hfi_event_data { u32 error; u32 height; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen2.c index 495327160ec292f5fdc8f9532054c58046a10250..27878b70e516bec0eefbb094b58= ecba882332bf5 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c @@ -745,6 +745,16 @@ static const struct platform_inst_fw_cap inst_fw_cap_s= m8550_enc[] =3D { .flags =3D CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, .set =3D iris_set_use_and_mark_ltr, }, + { + .cap_id =3D B_FRAME, + .min =3D 0, + .max =3D 1, + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROP_MAX_B_FRAMES, + .flags =3D CAP_FLAG_OUTPUT_PORT, + .set =3D iris_set_u32, + }, }; =20 static const u32 sm8550_vdec_input_config_params_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 2f4392e6a42ea9280d48ae46791277394b2f3be8..422e83ae07884ce72d6e9aba8c1= 76f474384b0f0 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -157,6 +157,8 @@ enum platform_inst_fw_cap_type { LTR_COUNT, USE_LTR, MARK_LTR, + B_FRAME, + INTRA_PERIOD, INST_FW_CAP_MAX, }; =20 diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index 891aed5091c7a0fd0bf1f1a3a7737d49e6d8cea2..0ed82dc2b8af8c789df1b8c10c1= a5afc51ef39d8 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -936,11 +936,15 @@ static u32 iris_vpu_enc_bin_size(struct iris_inst *in= st) =20 static inline u32 hfi_buffer_get_recon_count(struct iris_inst *inst) { + u32 bframe_count, ltr_count; u32 num_ref =3D 1; - u32 ltr_count; =20 + bframe_count =3D inst->fw_caps[B_FRAME].value; ltr_count =3D inst->fw_caps[LTR_COUNT].value; =20 + if (bframe_count) + num_ref =3D 2; + if (ltr_count) num_ref =3D num_ref + ltr_count; =20 --=20 2.43.0 From nobody Fri Jun 12 22:33:08 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3328B38AC87 for ; Tue, 12 May 2026 08:55:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576149; cv=none; b=VSlLeiViG0HScCFJznIjOH7V6UGXdIOw4Y0h0foGSmmA7v2qtGSpHdXLF0hmnuThcyV3OgXnJCEHbZWaosNCcBJreCeMadESdtSvrtXkrB8znUiXWkHEbIUWKyq2nu2kufbRdXo4fuf7VHdEnbVyHI9Jrtx731sfDpIaiQV/1wY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576149; c=relaxed/simple; bh=JWthXrwt2jsnrPtnSVWGCqc79fLIHu/WFtE4yTyR7gk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tEFrs27rTrAkJVxwUHmrdy8sg0SNOgVHY8OO3Xo7XtDqKx2hix39FF2oSggAH8fuQj8zDqqz3XVaUwU2kiys5s3o5aA0sqk5g90ngkF8eOYIh0s7vChkHCyM42COxE9S/D/H02VxYbdA2wB7JQJx933Y06zrgTHMnadaDm5NOs8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=kl4E7P+t; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=hNN7kBQD; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="kl4E7P+t"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="hNN7kBQD" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64C55vtQ3384912 for ; Tue, 12 May 2026 08:55:35 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= GSjDPqa8mA8IkXiaQe888faLXc7yZrZ0hWCLQjnHg8A=; b=kl4E7P+tvN92uCSb Sj5sxj7vkGPyBBQj8F83KAgoPPH/YMtJzxJyz8uD+p9jHRNWoWKNu6dwGzG5ijJg xwyxzOrBz0wK88ehBfWmQnfDLqJ5ueNGlWGdhX6vezzOUXdf+m6ek5Vng+fZov7j GPbfFG4hCwBPfLsNBcsVJ1KxzYiu2Oa/wcaGwEVJLDxjj+3gq1yH981GhOMwGQ+p sCmcQhVlQAUTFdx1NOm+7VDUmY74gAk69vSVUTnjRGXyan6HQIYNDRCLOPIURwYk yfuW3KEBdaOwScafUAxiyW23+peCp8ZyjdPVoSPkH4VWpf6PC3a2ENQfx2ZbV7yF o3SLdA== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e3nv4j9gn-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 08:55:35 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ba3245a43dso44364935ad.0 for ; Tue, 12 May 2026 01:55:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778576135; x=1779180935; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=GSjDPqa8mA8IkXiaQe888faLXc7yZrZ0hWCLQjnHg8A=; b=hNN7kBQD1xDC+MFVjbYLNxV81ROL5E12FhLsOK6AVnr79/879NzeenrFqg3B/c+Pwi 684h4584H1ipmJ9sGCFbiRfu4mCT/alwDkOyAZiHBgnqQgWHflMfCIPB5S3nGQtWHoRV kViuOjzoGVp21KSBH00aIRgn3PTGLqvLkaiUkZcHmkk2gIEd57kF2KMpHDhqQAICtes/ LKbJgKS/vfNUndx7HTN/NcDC4oEeW6Fze2AW+uPRHyD3Lqh/Ua0y5bJeixkcAXyfzPFg 9/x178G1t3V+gyrErb34yXA4/uoa0qlcGTp8JuqB80+Db2X+a6aIumYuany+KmCyTu5R rZTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778576135; x=1779180935; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=GSjDPqa8mA8IkXiaQe888faLXc7yZrZ0hWCLQjnHg8A=; b=PrDgwWwRNJVn5wC0kdroNi+CpDH3Qk+TutiRXgETWzzrzfiRbaG4Cifwl3Yyux8TLr ITW8F3yKOPh3pXWPpUOSuDTurYL3oEUVYAelyqoXX8PKgxm7UTZINB7zCbYuXHOZc47j y6ky9WyqFgHP3xkCa2l1gFnhJvA1yOgR+qIDa15DCMVdsMfPWQCSC+Cv/rV7li7w6o/Y Q0N+WOeM4J3t8lUirlyKJb6bFxei0gJ77g3tjmw5KM20NeFO4eBDVGzDTBQWBKHHpFaa tMP7gN5qX8aggl5FF+c+6BMeCOtB9L2cAp7EVHPmV9QMaVNl/OaaSPbAJgZbapx4oLvl 1+rg== X-Forwarded-Encrypted: i=1; AFNElJ9Rf3RlnVwfAYaCx8jR9//owIXUV22oNv6TrTAff3UGrG4LOha39duRYqQAG60dXIASvqVCEesaplTstR8=@vger.kernel.org X-Gm-Message-State: AOJu0YzmFnwSyxepA8gZQK2jezAsaKZcMs0ZICjlvisNG18mL0vedrJ4 g3bdYbpNG5/Vrw6VFt1jMeQTNLr46pLZZfPATTgsI9bO/JEqtHX9xOAD3PPDBR/6ioIsMM/xX3G rCmXsGiN/uTKQNo9IIS/puYpEE5ePVNeOZlV0hI8uWR9J2pRaiv1Hu3TPLkhy+fF47lM= X-Gm-Gg: Acq92OFkY12JPfejgrDosa8zW0dLlJMRud384T5aUI7tra5afRe6jDYmeqs2bXJ9JX9 WqsDOPwI22NYtO4ZG1kLQBGt5pVQ5X1bZH0XAtYIVGpCu01+ympPhVhd8KhIby6UgQGqKASRLef sRPLVpXSSLIpNwfKXuypWC/4kEpfG83Curb9iAeV0dqD4qdW+vF1gfJG95UyfEflUY1r69NHoPe TM7dzsa8UJ/ziTKWSTGDWWjgodciSqz4Y5nlmMgEOtRyNKQrnunkFTOkoqFu4l1f7gOeCZdDk8w jm5+SDIvhRZK1wZgCOdDr7CrGhSe77/kbdpxpzmLChaqORy40CcF1hawPZRbScxRXpdGD9rgaDc qI7eIiuDdZenTU58nJwqg4xeyjudgK5hxfl6b5SkjC3mvqEq/gMb85ROFe1lMkqzSxR2EkMlmBP HsQ2dMiKDEE1zyk6u06FzE X-Received: by 2002:a17:903:2ace:b0:2ba:9e1c:7cbb with SMTP id d9443c01a7336-2bd012ae0e6mr23868475ad.34.1778576134219; Tue, 12 May 2026 01:55:34 -0700 (PDT) X-Received: by 2002:a17:903:2ace:b0:2ba:9e1c:7cbb with SMTP id d9443c01a7336-2bd012ae0e6mr23867945ad.34.1778576133529; Tue, 12 May 2026 01:55:33 -0700 (PDT) Received: from WANGAOW-LAB01.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm127641405ad.66.2026.05.12.01.55.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 01:55:33 -0700 (PDT) From: Wangao Wang Date: Tue, 12 May 2026 16:55:13 +0800 Subject: [PATCH v7 4/6] media: qcom: iris: Add hierarchical coding support for encoder Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-batch2_features-v7-4-4954e3b4df84@oss.qualcomm.com> References: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> In-Reply-To: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Wangao Wang X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778576115; l=31608; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=JWthXrwt2jsnrPtnSVWGCqc79fLIHu/WFtE4yTyR7gk=; b=Q1R6G7tpsym4ixIvCrXCdfmt6Np+/GiAennMlyCXVIyuqa0tO79ECv1kfaeDmjgK6tP2BHv16 GSC5VQ0JyvgCre95DLgm9NvA9cnEh1fuy9rVgmTpDiBPK4u3geCaF/q X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Authority-Analysis: v=2.4 cv=ZrTd7d7G c=1 sm=1 tr=0 ts=6a02eb07 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=pEw79mLSGxr9eRpYBYUA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDA5MCBTYWx0ZWRfX29nsf13cl1MT gUxu/6wf1TRI14E7oBoUoUZFbwhYTwZk0Q8d2I6hIzc4tJWH5yXXnTmZBrz3lVLS+a3TkqlwHf/ 7dGZJJ+SzaY+cGJ3zI3PxF7PIG5Kile9TQp/+xhn7a5xTg8t46PpgpgY1gyXSnjJGv0txW/21T9 /TBGBXbyjB3YFo8KoUEBeoQZbdRjxcyqXkTw7VgiYz6Un1esoDl7eQoTI1quwrcyUi1F/z0M+/r i2aCljuLbt2vXaJMbp9dm3dKGD6UbHYDZboyCWUwIGMFoh/m86lg0emjNa3ktlq+ECtAN2IcrUH df6bKvGGXdowlOr5tGHrRLp2AFuLAP1oTRcVh3QaGKCNp9jc5/xv7a8QtObCSRZtoMIVyWPSc+V awp9aqmD1DOuDeFEAYJBwfBRGmItyn/hv96r7mJFQM3lEczc0lqAD88eh/idetaNn5fgiuOiPRd 6PSnepVvy5+TtkMxwyQ== X-Proofpoint-ORIG-GUID: uCDJLj9M0JLgGtEm5QkLcjrTCSm_BM2d X-Proofpoint-GUID: uCDJLj9M0JLgGtEm5QkLcjrTCSm_BM2d X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 spamscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 bulkscore=0 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120090 Add hierarchical coding support for both gen1 and gen2 encoders by enabling the following V4L2 controls: H264: V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING, V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE, V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER HEVC(gen2 only): V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER Reviewed-by: Vikash Garodia Signed-off-by: Wangao Wang --- drivers/media/platform/qcom/iris/iris_ctrls.c | 288 +++++++++++++++++= +++- drivers/media/platform/qcom/iris/iris_ctrls.h | 7 +- drivers/media/platform/qcom/iris/iris_hfi_gen1.c | 94 ++++++- .../platform/qcom/iris/iris_hfi_gen1_command.c | 21 +- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 2 + drivers/media/platform/qcom/iris/iris_hfi_gen2.c | 184 ++++++++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 15 ++ drivers/media/platform/qcom/iris/iris_instance.h | 4 + .../platform/qcom/iris/iris_platform_common.h | 23 ++ drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 28 ++ 10 files changed, 658 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index a6bd2eada52b68afd91032315c2701d8c74a9763..10e33b8a73f60759c4f1cb17b5c= 95897f0e1468f 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -120,6 +120,40 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(= u32 id) return MARK_LTR; case V4L2_CID_MPEG_VIDEO_B_FRAMES: return B_FRAME; + case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING: + return LAYER_ENABLE; + case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE: + return LAYER_TYPE_H264; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE: + return LAYER_TYPE_HEVC; + case V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER: + return LAYER_COUNT_H264; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER: + return LAYER_COUNT_HEVC; + case V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR: + return LAYER0_BITRATE_H264; + case V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR: + return LAYER1_BITRATE_H264; + case V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR: + return LAYER2_BITRATE_H264; + case V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR: + return LAYER3_BITRATE_H264; + case V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR: + return LAYER4_BITRATE_H264; + case V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR: + return LAYER5_BITRATE_H264; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR: + return LAYER0_BITRATE_HEVC; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR: + return LAYER1_BITRATE_HEVC; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR: + return LAYER2_BITRATE_HEVC; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR: + return LAYER3_BITRATE_HEVC; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR: + return LAYER4_BITRATE_HEVC; + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR: + return LAYER5_BITRATE_HEVC; default: return INST_FW_CAP_MAX; } @@ -229,6 +263,40 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_= type cap_id) return V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX; case B_FRAME: return V4L2_CID_MPEG_VIDEO_B_FRAMES; + case LAYER_ENABLE: + return V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING; + case LAYER_TYPE_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_TYPE; + case LAYER_TYPE_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE; + case LAYER_COUNT_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER; + case LAYER_COUNT_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER; + case LAYER0_BITRATE_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR; + case LAYER1_BITRATE_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR; + case LAYER2_BITRATE_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR; + case LAYER3_BITRATE_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR; + case LAYER4_BITRATE_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR; + case LAYER5_BITRATE_H264: + return V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR; + case LAYER0_BITRATE_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR; + case LAYER1_BITRATE_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR; + case LAYER2_BITRATE_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR; + case LAYER3_BITRATE_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR; + case LAYER4_BITRATE_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR; + case LAYER5_BITRATE_HEVC: + return V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR; default: return 0; } @@ -575,7 +643,64 @@ int iris_set_header_mode_gen2(struct iris_inst *inst, = enum platform_inst_fw_cap_ &hfi_val, sizeof(u32)); } =20 -int iris_set_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_typ= e cap_id) +int iris_set_bitrate_gen1(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + u32 entropy_mode =3D inst->fw_caps[ENTROPY_MODE].value; + u32 bitrate =3D inst->fw_caps[cap_id].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + struct hfi_bitrate hfi_val; + u32 max_bitrate; + + if (!(inst->fw_caps[cap_id].flags & CAP_FLAG_CLIENT_SET) && cap_id !=3D B= ITRATE) + return -EINVAL; + + if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) { + max_bitrate =3D CABAC_MAX_BITRATE; + } else { + if (entropy_mode =3D=3D V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC) + max_bitrate =3D CABAC_MAX_BITRATE; + else + max_bitrate =3D CAVLC_MAX_BITRATE; + } + + hfi_val.bitrate =3D min(bitrate, max_bitrate); + + switch (cap_id) { + case BITRATE: + case LAYER0_BITRATE_H264: + hfi_val.layer_id =3D 0; + break; + case LAYER1_BITRATE_H264: + hfi_val.layer_id =3D 1; + break; + case LAYER2_BITRATE_H264: + hfi_val.layer_id =3D 2; + break; + case LAYER3_BITRATE_H264: + hfi_val.layer_id =3D 3; + break; + case LAYER4_BITRATE_H264: + hfi_val.layer_id =3D 4; + break; + case LAYER5_BITRATE_H264: + hfi_val.layer_id =3D 5; + break; + default: + return -EINVAL; + } + + if (hfi_val.layer_id > 0 && !inst->fw_caps[LAYER_ENABLE].value) + return -EINVAL; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_STRUCTURE, + &hfi_val, sizeof(hfi_val)); +} + +int iris_set_bitrate_gen2(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id) { const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; u32 entropy_mode =3D inst->fw_caps[ENTROPY_MODE].value; @@ -1191,6 +1316,167 @@ int iris_set_intra_period(struct iris_inst *inst, e= num platform_inst_fw_cap_type &intra_period, sizeof(intra_period)); } =20 +int iris_set_layer_type(struct iris_inst *inst, enum platform_inst_fw_cap_= type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + u32 layer_enable =3D inst->fw_caps[LAYER_ENABLE].value; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + u32 layer_type; + + if (inst->hfi_rc_type =3D=3D HFI_RATE_CONTROL_CQ || + inst->hfi_rc_type =3D=3D HFI_RATE_CONTROL_OFF) + return -EINVAL; + + if (inst->codec =3D=3D V4L2_PIX_FMT_H264) { + if (!layer_enable || !inst->fw_caps[LAYER_COUNT_H264].value) + return -EINVAL; + + if (inst->fw_caps[LAYER_TYPE_H264].value =3D=3D + V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P) { + if (inst->hfi_rc_type =3D=3D HFI_RC_VBR_CFR) + layer_type =3D HFI_HIER_P_HYBRID_LTR; + else + layer_type =3D HFI_HIER_P_SLIDING_WINDOW; + } else if (inst->fw_caps[LAYER_TYPE_H264].value =3D=3D + V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B) { + if (inst->hfi_rc_type =3D=3D HFI_RC_VBR_CFR) + layer_type =3D HFI_HIER_B; + else + return -EINVAL; + } else { + return -EINVAL; + } + } else if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) { + if (!inst->fw_caps[LAYER_COUNT_HEVC].value) + return -EINVAL; + + if (inst->fw_caps[LAYER_TYPE_HEVC].value =3D=3D + V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P) { + layer_type =3D HFI_HIER_P_SLIDING_WINDOW; + } else if (inst->fw_caps[LAYER_TYPE_HEVC].value =3D=3D + V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B) { + if (inst->hfi_rc_type =3D=3D HFI_RC_VBR_CFR) + layer_type =3D HFI_HIER_B; + else + return -EINVAL; + } else { + return -EINVAL; + } + } else { + return -EINVAL; + } + + inst->hfi_layer_type =3D layer_type; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_U32_ENUM, + &layer_type, sizeof(u32)); +} + +int iris_set_layer_count_gen1(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + struct vb2_queue *sq =3D v4l2_m2m_get_src_vq(inst->m2m_ctx); + struct vb2_queue *dq =3D v4l2_m2m_get_dst_vq(inst->m2m_ctx); + u32 layer_enable =3D inst->fw_caps[LAYER_ENABLE].value; + u32 layer_count =3D inst->fw_caps[cap_id].value; + u32 hfi_id, ret; + + if (!layer_enable || !layer_count) + return -EINVAL; + + inst->hfi_layer_count =3D layer_count; + + if (!vb2_is_streaming(sq) && !vb2_is_streaming(dq)) { + hfi_id =3D HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER; + ret =3D hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_U32, + &layer_count, sizeof(u32)); + if (ret) + return ret; + } + + hfi_id =3D inst->fw_caps[cap_id].hfi_id; + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_U32, + &layer_count, sizeof(u32)); +} + +int iris_set_layer_count_gen2(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + u32 layer_type =3D inst->hfi_layer_type; + u32 layer_count, layer_count_max; + + layer_count =3D (inst->codec =3D=3D V4L2_PIX_FMT_H264) ? + inst->fw_caps[LAYER_COUNT_H264].value : + inst->fw_caps[LAYER_COUNT_HEVC].value; + + if (!layer_count) + return -EINVAL; + + if (layer_type =3D=3D HFI_HIER_B) { + layer_count_max =3D MAX_LAYER_HB; + } else if (layer_type =3D=3D HFI_HIER_P_HYBRID_LTR) { + layer_count_max =3D MAX_AVC_LAYER_HP_HYBRID_LTR; + } else if (layer_type =3D=3D HFI_HIER_P_SLIDING_WINDOW) { + if (inst->codec =3D=3D V4L2_PIX_FMT_H264) { + layer_count_max =3D MAX_AVC_LAYER_HP_SLIDING_WINDOW; + } else { + if (inst->hfi_rc_type =3D=3D HFI_RC_VBR_CFR) + layer_count_max =3D MAX_HEVC_VBR_LAYER_HP_SLIDING_WINDOW; + else + layer_count_max =3D MAX_HEVC_LAYER_HP_SLIDING_WINDOW; + } + } else { + return -EINVAL; + } + + if (layer_count > layer_count_max) + layer_count =3D layer_count_max; + + layer_count +=3D 1; /* base layer */ + inst->hfi_layer_count =3D layer_count; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_U32, + &layer_count, sizeof(u32)); +} + +int iris_set_layer_bitrate(struct iris_inst *inst, enum platform_inst_fw_c= ap_type cap_id) +{ + const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; + struct vb2_queue *sq =3D v4l2_m2m_get_src_vq(inst->m2m_ctx); + struct vb2_queue *dq =3D v4l2_m2m_get_dst_vq(inst->m2m_ctx); + u32 hfi_id =3D inst->fw_caps[cap_id].hfi_id; + u32 bitrate =3D inst->fw_caps[cap_id].value; + + /* ignore layer bitrate when total bitrate is set */ + if (inst->fw_caps[BITRATE].flags & CAP_FLAG_CLIENT_SET) + return 0; + + if (!(inst->fw_caps[cap_id].flags & CAP_FLAG_CLIENT_SET)) + return -EINVAL; + + if (!vb2_is_streaming(sq) && !vb2_is_streaming(dq)) + return -EINVAL; + + return hfi_ops->session_set_property(inst, hfi_id, + HFI_HOST_FLAGS_NONE, + iris_get_port_info(inst, cap_id), + HFI_PAYLOAD_U32, + &bitrate, sizeof(u32)); +} + int iris_set_properties(struct iris_inst *inst, u32 plane) { const struct iris_hfi_session_ops *hfi_ops =3D inst->hfi_session_ops; diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.h b/drivers/media/= platform/qcom/iris/iris_ctrls.h index 609258c81517b71523b682ca994786cdd020b07f..3c462ec9190be8935176b290588= f224fe4f144a4 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.h +++ b/drivers/media/platform/qcom/iris/iris_ctrls.h @@ -22,7 +22,8 @@ int iris_set_level(struct iris_inst *inst, enum platform_= inst_fw_cap_type cap_id int iris_set_profile_level_gen1(struct iris_inst *inst, enum platform_inst= _fw_cap_type cap_id); int iris_set_header_mode_gen1(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id); int iris_set_header_mode_gen2(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id); -int iris_set_bitrate(struct iris_inst *inst, enum platform_inst_fw_cap_typ= e cap_id); +int iris_set_bitrate_gen1(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id); +int iris_set_bitrate_gen2(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id); int iris_set_peak_bitrate(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id); int iris_set_bitrate_mode_gen1(struct iris_inst *inst, enum platform_inst_= fw_cap_type cap_id); int iris_set_bitrate_mode_gen2(struct iris_inst *inst, enum platform_inst_= fw_cap_type cap_id); @@ -42,6 +43,10 @@ int iris_set_use_ltr(struct iris_inst *inst, enum platfo= rm_inst_fw_cap_type cap_ int iris_set_mark_ltr(struct iris_inst *inst, enum platform_inst_fw_cap_ty= pe cap_id); int iris_set_use_and_mark_ltr(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id); int iris_set_intra_period(struct iris_inst *inst, enum platform_inst_fw_ca= p_type cap_id); +int iris_set_layer_type(struct iris_inst *inst, enum platform_inst_fw_cap_= type cap_id); +int iris_set_layer_count_gen1(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id); +int iris_set_layer_count_gen2(struct iris_inst *inst, enum platform_inst_f= w_cap_type cap_id); +int iris_set_layer_bitrate(struct iris_inst *inst, enum platform_inst_fw_c= ap_type cap_id); int iris_set_properties(struct iris_inst *inst, u32 plane); =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen1.c index 792441463b4bad19da5a45b46c4dafcf2caa75c3..ca1545d28b5310d8c45a905287d= cb69f6184d9cc 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c @@ -136,7 +136,7 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm= 8250_enc[] =3D { .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE, .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, - .set =3D iris_set_bitrate, + .set =3D iris_set_bitrate_gen1, }, { .cap_id =3D BITRATE_MODE, @@ -291,6 +291,98 @@ static const struct platform_inst_fw_cap inst_fw_cap_s= m8250_enc[] =3D { .flags =3D CAP_FLAG_OUTPUT_PORT, .set =3D iris_set_intra_period, }, + { + .cap_id =3D LAYER_ENABLE, + .min =3D 0, + .max =3D 1, + .step_or_mask =3D 1, + .value =3D 0, + .flags =3D CAP_FLAG_OUTPUT_PORT, + }, + { + .cap_id =3D LAYER_TYPE_H264, + .min =3D V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P, + .max =3D V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P, + .step_or_mask =3D BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P), + .value =3D V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, + }, + { + .cap_id =3D LAYER_COUNT_H264, + .min =3D 0, + .max =3D MAX_HIER_CODING_LAYER_GEN1, + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_HIER_P_ENH_LAYER, + .flags =3D CAP_FLAG_OUTPUT_PORT, + .set =3D iris_set_layer_count_gen1, + }, + { + .cap_id =3D LAYER0_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_bitrate_gen1, + }, + { + .cap_id =3D LAYER1_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_bitrate_gen1, + }, + { + .cap_id =3D LAYER2_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_bitrate_gen1, + }, + { + .cap_id =3D LAYER3_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_bitrate_gen1, + }, + { + .cap_id =3D LAYER4_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_bitrate_gen1, + }, + { + .cap_id =3D LAYER5_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_bitrate_gen1, + }, }; =20 static const u32 sm8250_vdec_input_config_param_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 05e7b5ff2b9224b201cf87858c0375ac6866e9bb..4cb54e5e4f1f15137d08027ac9a= 0d46c46784ea8 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -604,11 +604,10 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_= session_set_property_pkt *p break; } case HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE: { - struct hfi_bitrate *brate =3D prop_data; - u32 *in =3D pdata; + struct hfi_bitrate *in =3D pdata, *brate =3D prop_data; =20 - brate->bitrate =3D *in; - brate->layer_id =3D 0; + brate->bitrate =3D in->bitrate; + brate->layer_id =3D in->layer_id; packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*brate); break; } @@ -728,6 +727,20 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_s= ession_set_property_pkt *p packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*intra_period); break; } + case HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER: { + u32 *in =3D pdata; + + packet->data[1] =3D *in; + packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(u32); + break; + } + case HFI_PROPERTY_CONFIG_VENC_HIER_P_ENH_LAYER: { + u32 *in =3D pdata; + + packet->data[1] =3D *in; + packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(u32); + break; + } default: return -EINVAL; } diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_defines.h index 4343661e86065f5623b2c02c7ee808a3c47a8c41..0e4dee19238464a9671a94eaab8= eeda2d7f7ca9f 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h @@ -154,11 +154,13 @@ =20 #define HFI_PROPERTY_PARAM_VENC_LTRMODE 0x200501c #define HFI_PROPERTY_PARAM_VENC_MAX_NUM_B_FRAMES 0x2005020 +#define HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER 0x2005026 #define HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE 0x2006001 #define HFI_PROPERTY_CONFIG_VENC_INTRA_PERIOD 0x2006003 #define HFI_PROPERTY_CONFIG_VENC_MARKLTRFRAME 0x2006009 #define HFI_PROPERTY_CONFIG_VENC_USELTRFRAME 0x200600a #define HFI_PROPERTY_CONFIG_VENC_SYNC_FRAME_SEQUENCE_HEADER 0x2006008 +#define HFI_PROPERTY_CONFIG_VENC_HIER_P_ENH_LAYER 0x200600b =20 struct hfi_pkt_hdr { u32 size; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c b/drivers/med= ia/platform/qcom/iris/iris_hfi_gen2.c index 27878b70e516bec0eefbb094b58ecba882332bf5..7a85c1d4e5e699dc7c615865035= b43d94217ce16 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2.c @@ -391,7 +391,7 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm= 8550_enc[] =3D { .hfi_id =3D HFI_PROP_TOTAL_BITRATE, .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, - .set =3D iris_set_bitrate, + .set =3D iris_set_bitrate_gen2, }, { .cap_id =3D BITRATE_PEAK, @@ -755,6 +755,188 @@ static const struct platform_inst_fw_cap inst_fw_cap_= sm8550_enc[] =3D { .flags =3D CAP_FLAG_OUTPUT_PORT, .set =3D iris_set_u32, }, + { + .cap_id =3D LAYER_ENABLE, + .min =3D 0, + .max =3D 1, + .step_or_mask =3D 1, + .value =3D 0, + .flags =3D CAP_FLAG_OUTPUT_PORT, + }, + { + .cap_id =3D LAYER_TYPE_H264, + .min =3D V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B, + .max =3D V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P, + .step_or_mask =3D BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_B) | + BIT(V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P), + .value =3D V4L2_MPEG_VIDEO_H264_HIERARCHICAL_CODING_P, + .hfi_id =3D HFI_PROP_LAYER_ENCODING_TYPE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, + .set =3D iris_set_layer_type, + }, + { + .cap_id =3D LAYER_TYPE_HEVC, + .min =3D V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B, + .max =3D V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P, + .step_or_mask =3D BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B) | + BIT(V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P), + .value =3D V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P, + .hfi_id =3D HFI_PROP_LAYER_ENCODING_TYPE, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU, + .set =3D iris_set_layer_type, + }, + { + .cap_id =3D LAYER_COUNT_H264, + .min =3D 0, + .max =3D 5, + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROP_LAYER_COUNT, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_count_gen2, + }, + { + .cap_id =3D LAYER_COUNT_HEVC, + .min =3D 0, + .max =3D 5, + .step_or_mask =3D 1, + .value =3D 0, + .hfi_id =3D HFI_PROP_LAYER_COUNT, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_count_gen2, + }, + { + .cap_id =3D LAYER0_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER1, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER1_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER2, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER2_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER3, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER3_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER4, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER4_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER5, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER5_BITRATE_H264, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER6, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER0_BITRATE_HEVC, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER1, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER1_BITRATE_HEVC, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER2, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER2_BITRATE_HEVC, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER3, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER3_BITRATE_HEVC, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER4, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER4_BITRATE_HEVC, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER5, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + }, + { + .cap_id =3D LAYER5_BITRATE_HEVC, + .min =3D 1, + .max =3D BITRATE_MAX, + .step_or_mask =3D 1, + .value =3D BITRATE_DEFAULT, + .hfi_id =3D HFI_PROP_BITRATE_LAYER6, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + } }; =20 static const u32 sm8550_vdec_input_config_params_default[] =3D { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_defines.h index aec19efc41a5ef47bbad2471d3c4575704859743..d09096a9d5f934acf072b05c2cf= 80f3007c3aa7e 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h @@ -74,7 +74,22 @@ enum hfi_rate_control { #define HFI_PROP_LTR_COUNT 0x03000134 #define HFI_PROP_LTR_MARK 0x03000135 #define HFI_PROP_LTR_USE 0x03000136 + +enum hfi_layer_encoding_type { + HFI_HIER_P_SLIDING_WINDOW =3D 0x1, + HFI_HIER_P_HYBRID_LTR =3D 0x2, + HFI_HIER_B =3D 0x3, +}; + +#define HFI_PROP_LAYER_ENCODING_TYPE 0x03000138 +#define HFI_PROP_LAYER_COUNT 0x03000139 #define HFI_PROP_TOTAL_BITRATE 0x0300013b +#define HFI_PROP_BITRATE_LAYER1 0x0300013c +#define HFI_PROP_BITRATE_LAYER2 0x0300013d +#define HFI_PROP_BITRATE_LAYER3 0x0300013e +#define HFI_PROP_BITRATE_LAYER4 0x0300013f +#define HFI_PROP_BITRATE_LAYER5 0x03000140 +#define HFI_PROP_BITRATE_LAYER6 0x03000141 #define HFI_PROP_MAX_GOP_FRAMES 0x03000146 #define HFI_PROP_MAX_B_FRAMES 0x03000147 #define HFI_PROP_QUALITY_MODE 0x03000148 diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/med= ia/platform/qcom/iris/iris_instance.h index 352af99699dd57641fd942d1fe3df9eb377d26b6..0041b0cc400195aaa29f4ed12c5= 4372c26693441 100644 --- a/drivers/media/platform/qcom/iris/iris_instance.h +++ b/drivers/media/platform/qcom/iris/iris_instance.h @@ -77,6 +77,8 @@ struct iris_fmt { * @enc_raw_height: source image height for encoder instance * @enc_scale_width: scale width for encoder instance * @enc_scale_height: scale height for encoder instance + * @hfi_layer_type: hierarchical coding layer type + * @hfi_layer_count: hierarchical coding layer count */ =20 struct iris_inst { @@ -120,6 +122,8 @@ struct iris_inst { u32 enc_raw_height; u32 enc_scale_width; u32 enc_scale_height; + u32 hfi_layer_type; + u32 hfi_layer_count; }; =20 #endif diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 422e83ae07884ce72d6e9aba8c176f474384b0f0..7ca37ca2dcca695816b2a285d0f= e494a32b3671b 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -31,6 +31,12 @@ struct iris_inst; #define INVALID_DEFAULT_MARK_OR_USE_LTR -1 #define MAX_LTR_FRAME_COUNT_GEN1 4 #define MAX_LTR_FRAME_COUNT_GEN2 2 +#define MAX_LAYER_HB 3 +#define MAX_AVC_LAYER_HP_HYBRID_LTR 5 +#define MAX_AVC_LAYER_HP_SLIDING_WINDOW 3 +#define MAX_HEVC_LAYER_HP_SLIDING_WINDOW 3 +#define MAX_HEVC_VBR_LAYER_HP_SLIDING_WINDOW 5 +#define MAX_HIER_CODING_LAYER_GEN1 6 =20 enum stage_type { STAGE_1 =3D 1, @@ -159,6 +165,23 @@ enum platform_inst_fw_cap_type { MARK_LTR, B_FRAME, INTRA_PERIOD, + LAYER_ENABLE, + LAYER_TYPE_H264, + LAYER_TYPE_HEVC, + LAYER_COUNT_H264, + LAYER_COUNT_HEVC, + LAYER0_BITRATE_H264, + LAYER1_BITRATE_H264, + LAYER2_BITRATE_H264, + LAYER3_BITRATE_H264, + LAYER4_BITRATE_H264, + LAYER5_BITRATE_H264, + LAYER0_BITRATE_HEVC, + LAYER1_BITRATE_HEVC, + LAYER2_BITRATE_HEVC, + LAYER3_BITRATE_HEVC, + LAYER4_BITRATE_HEVC, + LAYER5_BITRATE_HEVC, INST_FW_CAP_MAX, }; =20 diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index 0ed82dc2b8af8c789df1b8c10c1a5afc51ef39d8..c2cd4adc082394a9ab6f32a37fe= 4e57678019d89 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -936,6 +936,8 @@ static u32 iris_vpu_enc_bin_size(struct iris_inst *inst) =20 static inline u32 hfi_buffer_get_recon_count(struct iris_inst *inst) { + u32 layer_count =3D inst->hfi_layer_count; + u32 layer_type =3D inst->hfi_layer_type; u32 bframe_count, ltr_count; u32 num_ref =3D 1; =20 @@ -945,9 +947,35 @@ static inline u32 hfi_buffer_get_recon_count(struct ir= is_inst *inst) if (bframe_count) num_ref =3D 2; =20 + /* The shift operation here is rounding logic, similar to [(x+1)/2]. */ + if (layer_type =3D=3D HFI_HIER_P_HYBRID_LTR) + num_ref =3D (layer_count + 1) >> 1; + + if (layer_type =3D=3D HFI_HIER_P_SLIDING_WINDOW) { + if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) + num_ref =3D (layer_count + 1) >> 1; + else if (inst->codec =3D=3D V4L2_PIX_FMT_H264 && layer_count < 4) + num_ref =3D (layer_count - 1); + else + num_ref =3D layer_count; + } + if (ltr_count) num_ref =3D num_ref + ltr_count; =20 + /* + * The expression (1 << layers - 2) + 1 accounts for the number of refere= nce + * frames in the Adaptive Hierarchical B-frame encoding case. In this sch= eme, + * the number of frames in a sub-GOP is related to (2^(number of layers) = - 1), + * hence the use of the shift operation. + */ + if (layer_type =3D=3D HFI_HIER_B) { + if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) + num_ref =3D layer_count; + else + num_ref =3D (1 << (layer_count - 2)) + 1; + } + return num_ref; } =20 --=20 2.43.0 From nobody Fri Jun 12 22:33:08 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 969163A1A4D for ; Tue, 12 May 2026 08:55:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576152; cv=none; b=bAA1eGVPi/FwJjv2iSMg7VEyFvryqP2pQOzyl/2ZppfC6DGS+EM+1JF8jwKFjiM+r/RmwhxiXIedxeRQkuDhmf1jR2tGHbTCQbCaAYlGA+4Ufypf53gCfSTYJgMLIe94icCj03A7XGkzVslbvC9wM7ZbyxxYzcbqj6/H4clLgr4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576152; c=relaxed/simple; bh=oKyxv1kvMdyRYLfpJoBQM0SLvUyZbzRQr78EWfmIvEI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BcsXbLA2ROxwS/bL4EoS1+h/eu7d5c07pJIaJP41p3NYvAEU9YaTCKv6nckaSmptsXNRt7nqJyFRLK3FdQpPESgrxvFXy0a7nujQ+iG9OPhuLUr54C+gJXEPVqJSaoMIGoLwmAe/ci9WhfCerotMdC/Keq1AMM5KOmfOevQzEC4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=H+css+vK; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=KQc8VoR4; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="H+css+vK"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="KQc8VoR4" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64C5B1Vn2573884 for ; Tue, 12 May 2026 08:55:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= fUMIIa00afYZEA5MbAYNO41DoI7NKvRkyQl5PMTlsFU=; b=H+css+vKjMod976+ mdNUAettKOoF5WvuHJKYFQRBUwE4ZUN1R8q6B1U2OBQsn1P2Iq+9zIZj6zXbqLxt IisGi6iQ02quDfmxtvT0+Pcs/ddUqTETLMTx9Zew1ePmBc/AXpW8+zTeLWDnxwze uuM7DESM03nE11vbpLdLKiQFHyvtxj+c/FAC61yv/e3bUcfpsai5PWW6hn3FNnUk EH2t1IP6nkOjND37bGK7PYZ3enEqxjqjkNgVaQy6Y1gnsM4Fx9AqvU+JmIk9VamK Qn4D5KR/dqLOEfI5N/rG74MGQcW1A/asKAw3zF1o/3Pb9zs/QLVzG/LfMcm+T90Z 6EnlUw== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e3nv2ab5n-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 08:55:38 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2ba86e35aa1so80521715ad.1 for ; Tue, 12 May 2026 01:55:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778576138; x=1779180938; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=fUMIIa00afYZEA5MbAYNO41DoI7NKvRkyQl5PMTlsFU=; b=KQc8VoR4HyyNo5OlfdD7rzghR/ONFHr1qXV6wDBRQSmHoo0Bjf3Ln2fYcJHSOWWrq4 dwlVOgz8Vfl4PZC/yhYsiiXeidglVJ/jaZ+M3zMgy28bCPqPt9UAcutbhTyg4DKyWL1x 1cKCc1nUxIHNUanUb2KxnYQtSIon9k5rt0PVAK7xk3IVoblJVBIduGXd0RSMC/spT0Mr cLQggWeyG8OzArbOr+OyqHkkSkkrR/8wr8fJPvisx97KF6L1/LKn6W5VrMkTFyO0/JQW YBACokC4EWsKzuSrPLxVlu/n/kZkDHYJtjBEABF5ZNGEbKA5aX7JJLugtGYsY6V9LGSz ulcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778576138; x=1779180938; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=fUMIIa00afYZEA5MbAYNO41DoI7NKvRkyQl5PMTlsFU=; b=iv1ZDqIBAM43lgxI8Rt1g2viJJC8Bx4GLsZX2yhwd+iMQm5VO+2h7C6L6o8lcSuBvW x51DvHWpUzsjlnrCv7xcdRLz7HHvMEFJ17R74Z4DwOgCjM8pJ7UMX6E0Ndvd1CZ+PN3Z Ilea6gSrYGEFJoTpZBHmnQ/F+wokyt2O5dChJlfDU7zYJLynE+XJHV6//nWX4JZMGulP DN0V/isgBrV8a7tq1DqzvjTuJ1NvDO38Dr3BX/cCRxjuuxQkgDZv5Wvgp/s/d6wE9ljp vfNIF21q+0E7PgBdwTugrm4k7pI68sEMLKd5kNzKjoc7ZZMW1WmG816q+xQ+E7uldWZt ZnLw== X-Forwarded-Encrypted: i=1; AFNElJ8lfMEVyuVFRqUEz5j+D2mmg9d2oWrxAGb0c51+o8Fe29VqCq3M9ynM5sGzOPod5cwoqQPj/B+XYHX8voM=@vger.kernel.org X-Gm-Message-State: AOJu0YwqKi16DFM6DYjrp0wEs5dOVmWxk9Hkr5ZxxoCpAnBOAXACt6d5 RCIeAY874Nje/xS1RnrS4Tcb+KomEpzSy7b1Fz4tDzlkwqg28iorMZj0gcEUUYzq4xykEQQSm8I o7cbb+GUWXIviNQmt/oj+NFAExTWJuMvPnf7KsvcmWiQy7BQJPC32ac+54suDLcZB3YM= X-Gm-Gg: Acq92OFYNtPJASYb94MX7PqT9sVeGF0tZIAhhtfWwGChEq6UgYVwKH0rGHcxGTcdl9z yqqEHtTaZR31cpsYTh0+Et2UAvvsu8PIVDBq6XOIvjcPbtGReRvjbGSlyZkcmiluPP2qfEVBAUU gCX21ePpmII8uCMzjLse5gkegkeNhBHUFj6OewjAzpJSrO9MMBcxUi+B0Dwwu3zjpjLrZUehYuf /kqia7VSoJxGYU7VFfM35xijjYYWqJ2jVQiaVWugd/uJOhGT/QsWrxH4pHdB5LYLlZHqPSnfu/f NWH45VZPv7kIWtthVe16TeZEcDQvhVVvXphFPqrk5ZSDA5Q7Nf0QlJF6lzkaRyw0WwWKDhqpThA A51C2Op6wjTq6Vl8Cf7RmoqzgJa+fG9s0JOYxGWfCZqZqx7UcAdQwDdpWBMaW/fqO5oi2NxFshw Rue7Wcq3ZVZQrqkBBr6ZrZ X-Received: by 2002:a17:903:37c5:b0:2bc:e628:9cc7 with SMTP id d9443c01a7336-2bd012d5bf8mr24144905ad.24.1778576137627; Tue, 12 May 2026 01:55:37 -0700 (PDT) X-Received: by 2002:a17:903:37c5:b0:2bc:e628:9cc7 with SMTP id d9443c01a7336-2bd012d5bf8mr24144625ad.24.1778576137140; Tue, 12 May 2026 01:55:37 -0700 (PDT) Received: from WANGAOW-LAB01.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm127641405ad.66.2026.05.12.01.55.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 01:55:36 -0700 (PDT) From: Wangao Wang Date: Tue, 12 May 2026 16:55:14 +0800 Subject: [PATCH v7 5/6] media: qcom: iris: Optimize iris_hfi_gen1_packet_session_set_property Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-batch2_features-v7-5-4954e3b4df84@oss.qualcomm.com> References: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> In-Reply-To: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Wangao Wang , Neil Armstrong X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778576115; l=9503; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=oKyxv1kvMdyRYLfpJoBQM0SLvUyZbzRQr78EWfmIvEI=; b=orPoYIW33IQqzM3j6w/JUwIqmjRRRDk6d3p3IaZXfDZbBnkhYbt104RyWP//mD6TzXP+i5ozs YAhAfE7p+Z8AoeLLTa3SaOLQUgH4LqmI0NUcnmGDR9DN3sukvBBvZQY X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Authority-Analysis: v=2.4 cv=IsAutr/g c=1 sm=1 tr=0 ts=6a02eb0a cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=7zm3FxsWSslHyZ29AF8A:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: 8T5pD7U0UMeXDz-z-L819dK43kDPzu4E X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDA5MCBTYWx0ZWRfXxIWvBBONDryU ebmD1NoLg51T3dI3zTMSNfGfmRnjdphPHajLGNwEvsNeNhw70qwSICR51nlcT37SfHP5lVDB3/T VnhH2g+/rfew19QlB1gMVa5Yfnjby1t1slfQCVPdzJWn4mHFxn8BphD6MDygoUB2ywMUsFLr5pn ymRyi2tzP7j6IBy/xjQ85HdZm3ds9uyNXyzuIjmiB5+KyB7BKv5BTCKZEUpEkIjUguR705l888n v3xaENhjOhlX9uvytUw9l8s/SrlNh0VOhfenMkccPNIla+a/cjaPHkIWBwyU1DpmRfwsYLtYmC1 QSNgqDvXLruRonKxidjzyB1vG5eHK0YEkndtDr9N9HZ4pLIm6EFAMxwXGEd1ono12yJWspTcq2L vg9NmG9c5NFe2HTcOVMNUtDQOr2herSh2wX4A+esQ9xAJ2e+7mjCAVrimBxAMWz1Ly2Ue0VJOag skdRQzb4Kik2sFSufgg== X-Proofpoint-ORIG-GUID: 8T5pD7U0UMeXDz-z-L819dK43kDPzu4E X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 spamscore=0 bulkscore=0 clxscore=1015 phishscore=0 malwarescore=0 impostorscore=0 priorityscore=1501 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120090 Modify iris_hfi_gen1_packet_session_set_property to simplify size calculations and remove redundant code patterns. Previously, packet->shdr.hdr.size was incremented by sizeof(u32) in every switch case, resulting in repetitive and less maintainable logic. Reviewed-by: Dikshita Agarwal Tested-by: Neil Armstrong # on SM8650-HDK Signed-off-by: Wangao Wang Reviewed-by: Dmitry Baryshkov --- .../platform/qcom/iris/iris_hfi_gen1_command.c | 50 +++++++++++-------= ---- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 4cb54e5e4f1f15137d08027ac9a0d46c46784ea8..7674b47ad6c49adfaf16b444c8e= c7295b230a529 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -485,7 +485,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p { void *prop_data =3D &packet->data[1]; =20 - packet->shdr.hdr.size =3D sizeof(*packet); + packet->shdr.hdr.size =3D sizeof(*packet) + sizeof(ptype); packet->shdr.hdr.pkt_type =3D HFI_CMD_SESSION_SET_PROPERTY; packet->shdr.session_id =3D inst->session_id; packet->num_properties =3D 1; @@ -498,14 +498,14 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_= session_set_property_pkt *p fsize->buffer_type =3D in->buffer_type; fsize->height =3D in->height; fsize->width =3D in->width; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*fsize); + packet->shdr.hdr.size +=3D sizeof(*fsize); break; } case HFI_PROPERTY_CONFIG_VIDEOCORES_USAGE: { struct hfi_videocores_usage_type *in =3D pdata, *cu =3D prop_data; =20 cu->video_core_enable_mask =3D in->video_core_enable_mask; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*cu); + packet->shdr.hdr.size +=3D sizeof(*cu); break; } case HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SELECT: { @@ -514,7 +514,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p =20 hfi->buffer_type =3D in->buffer_type; hfi->format =3D in->format; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*hfi); + packet->shdr.hdr.size +=3D sizeof(*hfi); break; } case HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO: { @@ -533,7 +533,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p info->plane_format[1].buffer_alignment =3D 256; } =20 - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*info); + packet->shdr.hdr.size +=3D sizeof(*info); break; } case HFI_PROPERTY_PARAM_BUFFER_COUNT_ACTUAL: { @@ -543,7 +543,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p count->type =3D in->type; count->count_actual =3D in->count_actual; count->count_min_host =3D in->count_min_host; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*count); + packet->shdr.hdr.size +=3D sizeof(*count); break; } case HFI_PROPERTY_PARAM_VDEC_MULTI_STREAM: { @@ -552,7 +552,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p =20 multi->buffer_type =3D in->buffer_type; multi->enable =3D in->enable; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*multi); + packet->shdr.hdr.size +=3D sizeof(*multi); break; } case HFI_PROPERTY_PARAM_BUFFER_SIZE_ACTUAL: { @@ -560,7 +560,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p =20 sz->size =3D in->size; sz->type =3D in->type; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*sz); + packet->shdr.hdr.size +=3D sizeof(*sz); break; } case HFI_PROPERTY_PARAM_WORK_ROUTE: { @@ -568,7 +568,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p u32 *in =3D pdata; =20 wr->video_work_route =3D *in; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*wr); + packet->shdr.hdr.size +=3D sizeof(*wr); break; } case HFI_PROPERTY_PARAM_WORK_MODE: { @@ -576,7 +576,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p u32 *in =3D pdata; =20 wm->video_work_mode =3D *in; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*wm); + packet->shdr.hdr.size +=3D sizeof(*wm); break; } case HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT: { @@ -592,7 +592,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p /* Level not supported, falling back to 1 */ pl->level =3D 1; =20 - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*pl); + packet->shdr.hdr.size +=3D sizeof(*pl); break; } case HFI_PROPERTY_CONFIG_VENC_SYNC_FRAME_SEQUENCE_HEADER: { @@ -600,7 +600,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p u32 *in =3D pdata; =20 en->enable =3D *in; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*en); + packet->shdr.hdr.size +=3D sizeof(*en); break; } case HFI_PROPERTY_CONFIG_VENC_TARGET_BITRATE: { @@ -608,7 +608,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p =20 brate->bitrate =3D in->bitrate; brate->layer_id =3D in->layer_id; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*brate); + packet->shdr.hdr.size +=3D sizeof(*brate); break; } case HFI_PROPERTY_PARAM_VENC_RATE_CONTROL: { @@ -627,7 +627,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p } =20 packet->data[1] =3D *in; - packet->shdr.hdr.size +=3D sizeof(u32) * 2; + packet->shdr.hdr.size +=3D sizeof(u32); break; } case HFI_PROPERTY_PARAM_VENC_H264_ENTROPY_CONTROL: { @@ -637,7 +637,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p entropy->entropy_mode =3D *in; if (entropy->entropy_mode =3D=3D HFI_H264_ENTROPY_CABAC) entropy->cabac_model =3D HFI_H264_CABAC_MODEL_0; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*entropy); + packet->shdr.hdr.size +=3D sizeof(*entropy); break; } case HFI_PROPERTY_PARAM_VENC_SESSION_QP_RANGE_V2: { @@ -662,7 +662,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p ((max_qp & 0xFF) << 16); range->min_qp.enable =3D 7; range->max_qp.enable =3D 7; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*range); + packet->shdr.hdr.size +=3D sizeof(*range); break; } case HFI_PROPERTY_CONFIG_FRAME_RATE: { @@ -671,7 +671,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p =20 frate->buffer_type =3D in->buffer_type; frate->framerate =3D in->framerate; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*frate); + packet->shdr.hdr.size +=3D sizeof(*frate); break; } case HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_INFO: { @@ -683,7 +683,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p plane_actual_info->plane_format[0] =3D in->plane_format[0]; if (in->num_planes > 1) plane_actual_info->plane_format[1] =3D in->plane_format[1]; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*plane_actual_info); + packet->shdr.hdr.size +=3D sizeof(*plane_actual_info); break; } case HFI_PROPERTY_PARAM_VENC_INTRA_REFRESH: { @@ -691,7 +691,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p =20 intra_refresh->mode =3D in->mode; intra_refresh->mbs =3D in->mbs; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*intra_refresh); + packet->shdr.hdr.size +=3D sizeof(*intra_refresh); break; } case HFI_PROPERTY_PARAM_VENC_LTRMODE: { @@ -700,7 +700,7 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_se= ssion_set_property_pkt *p ltr_mode->mode =3D in->mode; ltr_mode->count =3D in->count; ltr_mode->trust_mode =3D in->trust_mode; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*ltr_mode); + packet->shdr.hdr.size +=3D sizeof(*ltr_mode); break; } case HFI_PROPERTY_CONFIG_VENC_USELTRFRAME: { @@ -709,14 +709,14 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_= session_set_property_pkt *p ltr_use->frames =3D in->frames; ltr_use->ref_ltr =3D in->ref_ltr; ltr_use->use_constrnt =3D in->use_constrnt; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*ltr_use); + packet->shdr.hdr.size +=3D sizeof(*ltr_use); break; } case HFI_PROPERTY_CONFIG_VENC_MARKLTRFRAME: { struct hfi_ltr_mark *in =3D pdata, *ltr_mark =3D prop_data; =20 ltr_mark->mark_frame =3D in->mark_frame; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*ltr_mark); + packet->shdr.hdr.size +=3D sizeof(*ltr_mark); break; } case HFI_PROPERTY_CONFIG_VENC_INTRA_PERIOD: { @@ -724,21 +724,21 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_= session_set_property_pkt *p =20 intra_period->pframes =3D in->pframes; intra_period->bframes =3D in->bframes; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(*intra_period); + packet->shdr.hdr.size +=3D sizeof(*intra_period); break; } case HFI_PROPERTY_PARAM_VENC_HIER_P_MAX_NUM_ENH_LAYER: { u32 *in =3D pdata; =20 packet->data[1] =3D *in; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(u32); + packet->shdr.hdr.size +=3D sizeof(u32); break; } case HFI_PROPERTY_CONFIG_VENC_HIER_P_ENH_LAYER: { u32 *in =3D pdata; =20 packet->data[1] =3D *in; - packet->shdr.hdr.size +=3D sizeof(u32) + sizeof(u32); + packet->shdr.hdr.size +=3D sizeof(u32); break; } default: --=20 2.43.0 From nobody Fri Jun 12 22:33:08 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D6E239E6EB for ; Tue, 12 May 2026 08:55:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576156; cv=none; b=HetoxE/7HBGNBq9+vqHD5YsmpkPSoucHnqJCMdgQUF0qPSx7od2gfte2wP+toWYQmVwM5hw4rBJYcYuSdL2ndHB0yu0jsZhBtUnAp1rNNmcSvrKLvGevHbLUV8WIKv1zuhnJfRfN+PJ/jegbaVPOSZV3tfGYCGVh9VVIX59AHtQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778576156; c=relaxed/simple; bh=W5OCjv9SAZMljCuLBN/Nsa8uVEm2rVmAfFav+iwZiDc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=e1DvrOA+Oyq2t6mymLY8pfp/Qy860rHjoLxDGwYIAeRX211Jb91zJVjmpgw5SmRAXkdz2ehc9bvoQfiaylo0y9HL/F9x/tkEPVay3bEiVIxwXtor1QAP6P/HYhzxNoFZ0xmfoJygjpz+RlzpmRn5Cspt3lcIOu590hVtr8PYu0c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=bCPRuTbE; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=aeOsVdCS; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="bCPRuTbE"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="aeOsVdCS" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64C5ArpW1183963 for ; Tue, 12 May 2026 08:55:42 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= aAKBWAJ2X/2OLZYyocKi+WlPjuToeQEsQ6K7eCRcW5A=; b=bCPRuTbER42E/UE9 OOIaKNSluSCSc8oGXOuZzfWWG7xRY/Gw6l2j52k59An/324evxY0oZv3SLZY+3yR EbIYScW/V9DjE1Ihl6ozZofUV4fGK+PXwg1D4T3ee9vQaCaCy18vtgUTSP6lEdn8 FpnSROtUdQYER5g8kvGvQyfcQfsrqLXbHCeIY1IeVREZC1dO/D0M+ENtqAre2rHO ckkolT9kvxyczB0+yDk/Dk4dzLuqSqfApVD0uaetv9wkJEQ2iKXMWCmE2yd9IvIJ DOMw2DKrmrUc7fgOYfQ6J3GbrwFcgWfHJHJl9hWRnQiYCNgx5tVM7VUVPijKKAjY 4YJjCg== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e3nuyab70-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 12 May 2026 08:55:41 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b461b36990so57494575ad.3 for ; Tue, 12 May 2026 01:55:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1778576141; x=1779180941; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=aAKBWAJ2X/2OLZYyocKi+WlPjuToeQEsQ6K7eCRcW5A=; b=aeOsVdCSNjgNv+yP1iBGVsL0oOzM3QEm8BSjAU0gk40EKEq9phjErcogBZsu953qIZ lnmLiU0YAYjUeRk/NceeqTzDJrlfwQq9tr8MWVSlEM7ExjBhJSQENsFe02jIb4RakNQG wxuSXNeBPSNA4YhfCD1pIKo6p1Bnua7wz14hd1MYen0+KMw5/ThhQYacZbULBfCae3Zg sGF7DJ2VQnjGtOxvh67WL9eYx+CnV/TEscVmwvPwcbkV8Bm0Va6aUV8jMWEI4812vvkC ePBvyKvKpzmOf3nwQNQOvDc0sJWoKVhpqMTbFZn6ZzchOnM0GXE005NJCR/X8ybg9pNN 6yLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778576141; x=1779180941; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=aAKBWAJ2X/2OLZYyocKi+WlPjuToeQEsQ6K7eCRcW5A=; b=EyOB2ly2GTnfl1I+sUk7qR2JLVD6OzYZM6Bu0CaJ5FAjDEjAbrKPUBows+eVODT2KT pS/TzmVr7BR1A/ThmGlSDbunT5pAygGuA4URE9TRy1aaEotZGC7L194qgYTl0aA/2Ean zzPwqcX04hR0CU0Gz8KlT0cJFZR0KdZSXJFeUTxdjwV1Kl04d44HaxjmEFq5kL5m4Lyd vbxqF6Iq6Vv7Nkw24NL1IKmg3BZUmgC7tk8RKMhgjvXvZnKb4/lJ4zlwhp2Pfn9G0b5/ 9MjZLuxB5vJuNjRo/kdx7w2hRENvyK/cwSef2A9hQLpJyxspICw6R3ip2SRPbFnuYNzd EMBg== X-Forwarded-Encrypted: i=1; AFNElJ9dPV0wRhO2ZzNGwQnqJimsVwH6o5SbZmjtnUFwja8Av93geNUsoev9jacltUwoj4X+OS2n8ZyFTHjOyTg=@vger.kernel.org X-Gm-Message-State: AOJu0YwiJVj0bWrXddTosVaF7toYXxDoyaNS4JHqu1P6av1FlDDRrO/N ISgpLWD3fxDfaIQkThDoIviNEaefmng6bNPqwJtCFDu0m7mf8hFrvusDv01mrE4aj0oSx3FY6dr pJdxRZ4FJpBfBigUQIn4AOvULhxy9fXoxbruOy3Wqwi8RNgoZyo1+p7EDKl4sV3WfONg= X-Gm-Gg: Acq92OGomMZnah8e76zsjZ2ib2L+alfY6tMQqqhDAWaHisuehuXk9sxnCdo30aKJBwn W0YXOZNrE8+Dk/fRfjLLQ4DpnCZrP0T31IxfrIUmKWylF2Qu6tyidXXjBxbMraLY9rMsPnoX5aQ A+GZ/6POb2yehoDojVM8W4GHzzTsILjO4O9K9tuEpinzeada96gX5/zqkDINmO5WvS0hBa9kmpz wrlXFBDBQqyyZR9NJNhqfu4MWuZlmxc/7EoEYVXQuRGUIg+PO5qOR5Ife9vuRLAtr63hJM70LDj cLvB+5fgCD9B1+6ebV6G0iPNw6wUa7I3aJxwcdC1goOmu84nnksFOg7Y3K1o4sFQ9aifxvh57cc rirWyZ+9V8Zv5q5OJKMYDJcrw34gijrDE27xzw205X4sR3YW4Ve3jEfFx739+cSMROlbEnjqs3x qf1g029CIerSR/1hlU4AeN X-Received: by 2002:a17:903:284:b0:2ba:6ca2:be0 with SMTP id d9443c01a7336-2baf0cf3149mr194198165ad.4.1778576141218; Tue, 12 May 2026 01:55:41 -0700 (PDT) X-Received: by 2002:a17:903:284:b0:2ba:6ca2:be0 with SMTP id d9443c01a7336-2baf0cf3149mr194197905ad.4.1778576140685; Tue, 12 May 2026 01:55:40 -0700 (PDT) Received: from WANGAOW-LAB01.ap.qualcomm.com (tpe-colo-wan-fw-bordernet.qualcomm.com. [103.229.16.4]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2baf1e90854sm127641405ad.66.2026.05.12.01.55.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 01:55:40 -0700 (PDT) From: Wangao Wang Date: Tue, 12 May 2026 16:55:15 +0800 Subject: [PATCH v7 6/6] media: qcom: iris: Simplify COMV size calculation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-batch2_features-v7-6-4954e3b4df84@oss.qualcomm.com> References: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> In-Reply-To: <20260512-batch2_features-v7-0-4954e3b4df84@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Wangao Wang , Neil Armstrong X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1778576115; l=1573; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=W5OCjv9SAZMljCuLBN/Nsa8uVEm2rVmAfFav+iwZiDc=; b=ZXeyI65zFtdp23qlYf2KAxFXLl1xjBxlL3/tg6yVFNX9ZR3a3z/EKsXyY3Zqee9uqB1G4m3de 5Ef3W3wqNo3AF3E8KSeagGYIJ7d+RjJnfOFYQZyRh7a5Gc0qShLV51t X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Proofpoint-ORIG-GUID: AdDHZ_5VJesHDMOCuIvUo88lYtX44i8W X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTEyMDA5MCBTYWx0ZWRfX/mX9d6fe+s4B q6RrJWDQypxtF+BNWVcNpFkwGuD1usyYcMIzy+N2gocVcsw+gYm9SQSFrf9ziMzEEMz1SCXOOb8 kDlAZM83RTriedbhT+km3rLo+7lQYN0cXD6HJPGbX4ykJyRNR8TvNt7TRQnrHBQ/bgTVsTnGJr3 bMAmMbbdNeTICWT3CJS9elmbyqO3ml+VlWBid9mnjQc608dCFEoL5whZ6L+yKAlROWkJxYC+lPM dpoj5M/3MXW9aT3J6XZsTh3iQoOgkWSPy+hnhZ7K08JaCXs9+9YvZUsa1WqsihjtNkWtqr/OF7u mG1GshCqxnmugP/N4fNbBhWiRHPf9wavryZitUCvCIznrDbI8yi6IYQg99FN43uzqFIesZ0Hzo2 wirOrCbG4bnP3jU7E6NXXjTq8kiJF/iZ2/SeEigt3RtD80k5EaI3OMpT8/V6v/02SUhU8IDs7fe iJsB7VX0eiBID2606pA== X-Authority-Analysis: v=2.4 cv=UZ5hjqSN c=1 sm=1 tr=0 ts=6a02eb0d cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=nuhDOHQX5FNHPW3J6Bj6AA==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=ihyF2tqwNky6lgPlo9sA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: AdDHZ_5VJesHDMOCuIvUo88lYtX44i8W X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-11_05,2026-05-08_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 phishscore=0 adultscore=0 clxscore=1015 lowpriorityscore=0 suspectscore=0 bulkscore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000 definitions=main-2605120090 Unify AVC/HEVC handling by computing codec and lcu_size upfront. Reviewed-by: Dikshita Agarwal Tested-by: Neil Armstrong # on SM8650-HDK Signed-off-by: Wangao Wang Reviewed-by: Dmitry Baryshkov --- drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index c2cd4adc082394a9ab6f32a37fe4e57678019d89..f55db869fee4d64273763fd3f98= d286f58e2e7b1 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -1014,16 +1014,13 @@ static u32 iris_vpu_enc_comv_size(struct iris_inst = *inst) u32 height =3D iris_vpu_enc_get_bitstream_height(inst); u32 width =3D iris_vpu_enc_get_bitstream_width(inst); u32 num_recon =3D hfi_buffer_get_recon_count(inst); - u32 lcu_size =3D 16; + u32 codec, lcu_size; =20 - if (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) { - lcu_size =3D 32; - return hfi_buffer_comv_enc(width, height, lcu_size, - num_recon + 1, HFI_CODEC_ENCODE_HEVC); - } + codec =3D (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) ? + HFI_CODEC_ENCODE_HEVC : HFI_CODEC_ENCODE_AVC; + lcu_size =3D (inst->codec =3D=3D V4L2_PIX_FMT_HEVC) ? 32 : 16; =20 - return hfi_buffer_comv_enc(width, height, lcu_size, - num_recon + 1, HFI_CODEC_ENCODE_AVC); + return hfi_buffer_comv_enc(width, height, lcu_size, num_recon + 1, codec); } =20 static inline --=20 2.43.0