From nobody Sun Feb 8 21:12:34 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 2717A2E266C for ; Fri, 19 Dec 2025 07:43:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130190; cv=none; b=hsF5NCLvnq/RIIWW1yVYnTOU51udPhFpS7faWbLLRAPdI1Rg0TAYTYB6TKjp/ImVd7+i62X98k1DmPGaRAWELDftDwNZRTklwtg0PIPbtPW/e6ECOC9M8MsThgPeq/e83vIiln+LIT2yh1u4BHlM+FfNwfj5AT+Q8WB3nkIrzXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130190; c=relaxed/simple; bh=Nrv04AtTzkKXaY2s8Htipm9Jw+ep4zOvvkaTyFf+gHs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OchW81DjfoeMbOSNf32JOtz0ibnl3QFIGA+e9Yv28jzZvM53qh8RyQxptg6UGs4ZgrF2f4IOHRr6GRMph0zEsia/SNfrhhS9sHATycdPckjbYlJ12GqDhX51nx3mT5hjFdcvnFBeD98lc1+9NYWxxZqT7x5QCfmOkFplhqYysP8= 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=pANJgTn5; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=SBRej+Ls; arc=none smtp.client-ip=205.220.180.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="pANJgTn5"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="SBRej+Ls" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BJ4c6US4145419 for ; Fri, 19 Dec 2025 07:43:06 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= FYLirUfiEXnjgPJucKUtZpWdxDHnZDigMmZ/CKd32ek=; b=pANJgTn52bKn2ZZ9 vvuSwHM6YWeJK0m0vqt6Y6XCoYVM/qAg0ZShfpynJocNfawRL16yzJAD+Gk+sO5D K7L2FZ0egc3gZEx1t28ZGdnTDT1ih4NI6FWPZvjN0m34yPL+KzCFszmlap/cywCf mtopi6e0klKt2NKicEZQNVwxa9cRRuwmE+TqZzXTFfLgGnQ8St/1Ghd2vYC90f6g r57b5U4C0Nlmrwmn0Gf81VrPHEO5H+CZIQYW3bE/qy97KViyY+8xAs/demYy0XvZ QTMn7GRdFKmwHugfJrm01QlI0jDAgzaq2zH9QpEEIQvQtjcozpMMxVp33wm/jDXK M1sHVw== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4b4r2dsrx1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 19 Dec 2025 07:43:06 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-29f29ae883bso21979105ad.3 for ; Thu, 18 Dec 2025 23:43:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766130185; x=1766734985; 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=FYLirUfiEXnjgPJucKUtZpWdxDHnZDigMmZ/CKd32ek=; b=SBRej+Lshi3jpr3xPJX3cNnNcyxDWbYH/j/JVdwhjieCsKe1WbjgRRPeCNBrv3Pj3l 2MZUnf4TjN6P3qVgV8ljx4giDBHrpWRDSpGc4//yL3/EfdpvmPxCXpdV3+QXb1T0+x4O W0FW9nzKk4FgXwDcOzdyHMCjmfwLa4CdKthAp6OYe6MiVB1pzLOgX6nKf7JEnQVhQiqQ zmx5eQj/oAaJQupFjU/4IZcG/wBnBEvuEJy8aLK7cYkMuO5ell9col2+pLw/xufa0lfn NCoPw8rWXdpW/2FwGaOivf29f5+q7zZeG4+P9Le+7QyHlzRk9xP1qtYLE54LLCzOcOvV rHjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766130185; x=1766734985; 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=FYLirUfiEXnjgPJucKUtZpWdxDHnZDigMmZ/CKd32ek=; b=kgEtpE+QhJ9LOcUl6eGFEFPb692NRWESX/Hc1q+1XP1rlzy1VWTj+Dtqlb4hf9ZA5m YlhU1XbdiiLTNAcWRDltjG5kwd/qzfTk6oL2xfES7IRzsdfnU0y2UCdepZab0hKoYndC I2K105shXKOpPllxDnLc0Sas4c2ViGOEUSSYHQOcd1mH50lUpVdIQywpN2vBOieqUBUp RAiyq5tbt5eIjwBgA6dVXyDuQmQZFy1cwj/iAYKycmaYE/uUtZkddCpb7PjWeBhlkiN4 ETjmtnRnTNOmiO68SqqsvmADlV+hWvHjq8XtOPgXHDRgmvtZQhtL+JcUY+gvuHysRXYw 7mgw== X-Forwarded-Encrypted: i=1; AJvYcCVxGCvHQkEEHtQf97ASM186bMxzCK3rltug2I3sNab0iOIqaJLwE9De1g5t6ou8N+rVfG1pmT1iEzAVo2s=@vger.kernel.org X-Gm-Message-State: AOJu0Yws0L+2BKsS+dCxmwatjwzCUK9UBHK+wHiFGOQBPNabwyFz/rY1 DfnUOc33elrbfqo/ChiiOYUuueqgKXXctgk0albkxc2aVwetk2YWf/oVtokSdj+dmPDJIefNyAO Fzm/foscy5aogj8mjXMdI1U4CjyI8bRwP68SFQ6KwZG7Yweao05kaRosZAy8f5RQAYjqRbbe6yt g= X-Gm-Gg: AY/fxX4Mrs7FHfDGDk0a1Ua1POPJE/9VZOkYxhvWvI683iXA0k3uRL8KMHhPyegePxW T/KteClIwXl8JQAJL7AuKU58jKoWUihI/Wl0m0He5tHPInq2MzpreW3108OlAszXSwlPwZHP9ZV RrA4ck9bP/PnclqkfU6HN008Z4KHZf9iVuDk5ZzKNBZ6LpMpxr9UU+ZbBW+C0p9SpGvsq4JI9yg P/9IWy9xKx7hq8FI2t5e7zPXH3+TVj+xq0Pdp2LgweombMtCNDY6D7N62eJjyJbwO08cKWOWOPh 2NWUlaticnpfRXVh3xcd56HxsujXlcGxxd9RbokoZHAE2iRFzG4kryAUc5R65j8m7/a/0+ISleE UbX9mAreB1kj44ZeFftNbQe2kGzFt1sAY9FAdafiu X-Received: by 2002:a17:902:c403:b0:297:f527:a38f with SMTP id d9443c01a7336-2a2f2231764mr20232255ad.18.1766130185160; Thu, 18 Dec 2025 23:43:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IFPzx+n2xsp2KwtdHBvU0RFQ/MfyxEjD55yf+nkGjSNvL5s5EbMYQ7NEk0kmfaj/g9zwknh6w== X-Received: by 2002:a17:902:c403:b0:297:f527:a38f with SMTP id d9443c01a7336-2a2f2231764mr20231905ad.18.1766130184584; Thu, 18 Dec 2025 23:43:04 -0800 (PST) Received: from WANGAOW-LAB01.ap.qualcomm.com ([114.94.8.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d4cb90sm14007325ad.51.2025.12.18.23.43.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 23:43:04 -0800 (PST) From: Wangao Wang Date: Fri, 19 Dec 2025 15:42:29 +0800 Subject: [PATCH v2 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: <20251219-batch2_iris_encoder_enhancements-v2-1-371f7fe24801@oss.qualcomm.com> References: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> In-Reply-To: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: quic_qiweil@quicinc.com, Renjiang Han , Wangao Wang , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766130176; l=7842; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=Nrv04AtTzkKXaY2s8Htipm9Jw+ep4zOvvkaTyFf+gHs=; b=CPGm2ha1RFSSGc7pvyJP+h6VvNKVXECT0qybxq7NeZfxvHwxWw5sKWrtsfMe3F06AKcmjCdap F0zf1XfH76ICAx88Wj0QMO1L7yWarhOYeahlIkAWJrZ0EfqHhkZz0e6 X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Proofpoint-ORIG-GUID: Aagirdmjg0oj3I9yny938kHrT-CBtIw1 X-Authority-Analysis: v=2.4 cv=A7ph/qWG c=1 sm=1 tr=0 ts=6945020a cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=Uz3yg00KUFJ2y2WijEJ4bw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=WeO3ibNpx1p7V1gMH_0A:9 a=QEXdDO2ut3YA:10 a=uG9DUKGECoFWVXl0Dc02:22 X-Proofpoint-GUID: Aagirdmjg0oj3I9yny938kHrT-CBtIw1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjE5MDA2MiBTYWx0ZWRfX3eA6LQonOj9h Fh2cSQkyL251oxH4HAp8Y/h7zv4ZoXKbDjAC5hnGtzCK9BUoasf0rIcDzF5iVqZ4VQZYx6wG0r8 jVSOZfEGxKMV/qCJ2KN8pHifSdXgoRGabTnl1r1FFXTtXVPBgIVCkY/cXilrCtC5zcjOyxhsCWs vPr+NJsgpMbOW+CLCd2HD7QcPRHFFOtbUU/HQjcjiQ9d7G+bTKu9Oagsup19wnKj502POcPhVPb C+nNvmlWonhOCnXdjG3a0Jey5pfTtRFZu6tCYnyuQkv+1g/I1EPAwQ+ZWHXiZ9rEXfmMPANKqQU lRWuf7bGtEowgeN8X6cL9n/BsJN9d0RN7mhlIctTjSVTIan3QzztbNrP45DMZvLCphR22Xn3cck jdwtTWi0Ztlm+J4Dvxk2rCBLQxFiEKIC+SFJy/zA8W/hnjGjALnRW6H99PwGQ7ZrzCutc54gs/U fhMdtwq5MNkholluGMg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-19_02,2025-12-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 spamscore=0 phishscore=0 suspectscore=0 malwarescore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512190062 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. Signed-off-by: Wangao Wang --- drivers/media/platform/qcom/iris/iris_ctrls.c | 39 ++++++++++++++++++= +++- drivers/media/platform/qcom/iris/iris_ctrls.h | 3 +- .../platform/qcom/iris/iris_hfi_gen1_command.c | 8 +++++ .../platform/qcom/iris/iris_hfi_gen1_defines.h | 13 ++++++++ .../media/platform/qcom/iris/iris_platform_gen1.c | 19 +++++++++++ .../media/platform/qcom/iris/iris_platform_gen2.c | 4 +-- 6 files changed, 82 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index 1910aa31a9b9218e9423f2916aa40b85185f0dfb..eae4fedc929e980eb001a5a6625= 159958d53a3d1 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -962,7 +962,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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 52da7ef7bab08fb1cb2ac804ccc6e3c7f9677890..4d9632ba86bc8f629cee6d726eb= 44efcdeba2475 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -685,6 +685,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_platform_gen1.c b/driver= s/media/platform/qcom/iris/iris_platform_gen1.c index 34cbeb8f52e248b6aec3e0ee911e14d50df07cce..e7645bd60eb46785e0110a34f32= 57f7c37bbfca5 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c @@ -230,6 +230,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 INT_MAX, + .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 struct platform_inst_caps platform_inst_cap_sm8250 =3D { diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index a2025d32b3235aaff25793ba77db143000e54bae..585f0aedc0eb5e80fd108929e18= 61101a7bab2be 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -630,12 +630,12 @@ static const struct platform_inst_fw_cap inst_fw_cap_= sm8550_enc[] =3D { { .cap_id =3D IR_PERIOD, .min =3D 0, - .max =3D INT_MAX, + .max =3D ((4096 * 2304) >> 8), .step_or_mask =3D 1, .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 Sun Feb 8 21:12:34 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 0E2371DF261 for ; Fri, 19 Dec 2025 07:43:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130195; cv=none; b=imtz08Zun0OL7leYmrCn0H44JKBP5pke57BlhvxkSW2iuNTCO4j7FjUnVCeLIt820Rg0bMYOdh8UcMxBG7wWUK0j+wib8RcYEfI4T3zohST2fl1X04vDdlGyfQPDvodq26H9EaWWrl1tSO+Wyx6PTYxMm+2OJGiUa6L6V+e53bU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130195; c=relaxed/simple; bh=fHQX0/QP2fJhPtUC530tRUPfr5fvxYSI+4tNhsQTpok=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bVa8dj4ypmBjlvi3Jqtdb6fODGaOkmVRQX9A57fsWGjd3TbWSkAoh2ewtET18Nym02RPBnKAv1wcRQnqY+okqLhcK8SbPjrbUedatUQSjlloUw6vWfo5qwummAPVbCtjfK1Aebn+BefvAw8VZZxN+LL00+Irr+CJXfa9jmxMgkI= 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=nd65eWls; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=dPCBk7GZ; arc=none smtp.client-ip=205.220.180.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="nd65eWls"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="dPCBk7GZ" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BJ4c6UT4145419 for ; Fri, 19 Dec 2025 07:43:11 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= JhpcmPRMhznPbfr5DnNKjbK6Pv100cIR3lFbHZl0ThE=; b=nd65eWlsOJ9e2y24 LWx4aikdzUVqV1aXRFFn9FunxpHHJEgemJIlt1g4evwZTUUPtQ1+DGfMUvaWAB6L 3ACQkYu/iZ9abMfgOubxlc5u/uucZJocEWFyx6GKTkynvnUrN2eRMR3ZSYEA5i1B J/Re1NhSUlqRHGZP2r4rHsLpYRr5WSDO50ON2Sok+A8T4VRq1gV9KUsvsFIYLrc9 MR+x24FHfWdwnvOKuQR1n1dCp+Pzmt4VcYPhAT5yE7WqH2CDAJR1liisHsZM1xcr vx7YWffOXXMZttKrCe/sFbeTSQ4PwE+PNRokBpge/O4tOe0pQqq/ZhWn6bu2dUDg pVAgCw== 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 4b4r2dsrxf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 19 Dec 2025 07:43:11 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-2a0d59f0198so20956265ad.1 for ; Thu, 18 Dec 2025 23:43:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766130190; x=1766734990; 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=JhpcmPRMhznPbfr5DnNKjbK6Pv100cIR3lFbHZl0ThE=; b=dPCBk7GZyjcUEtK0DWThrzGTAZ6Ba8ILbVe20ZwgZyAGfrcqaA/G00bVzV6js92Uge QIYRFVmo7ogC5Wb7VVdRdHWWRV3OyJiwZ/hrTyHzv4uMGh9vOSdlhttt48WPBjjZ4pYr r44MxNQzGFhgQne1m4IuibyWg18Z9hRofljfmke30rGxksH/1w/xkWT1hdI2fzhFTHeU bUY4YVywvmokKSA1Ym9F/GQUgZWNfYeSkDO0iAsQT5EffX28239LfA6t4WH2hSAvuMA0 cjfV0F1LwD8Cgfy7peDC//upjdX7YasGdOc8ZH3gKLYVLl0LF7h5M37QXtQcMnQsuYwr ykwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766130190; x=1766734990; 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=JhpcmPRMhznPbfr5DnNKjbK6Pv100cIR3lFbHZl0ThE=; b=tsn6h7ig1KHGVWj6RDSaP9H31/QdEogNtxaXMpNqkGtiYhaYxyazhr7ahhRdzaGTa+ Nb/avtyK4TSYo9WJ52fYIHe+PNSctGDSR0Pzb+lbSKxrSV4DQiNoc38TGwAuHJUD0KoO 3B9wfOt9VxrBvDwGElBNtT5kgk4Bp4L3K0F9cHd+/ut1MaGDZO1AlT88DPwc6sfPao1b hd2vhpO/9LUb8bdVdqPOsg98EexC3w0HNxpERzCRuldVi8AdE+dyR43yQW8sCiTsMp56 nulziD5fWG3k5zQjs9cVi9LzZeT7feUmdiC1Jw53DVNIkoFKxjMtdQYKH2G1dlMOw/nY fNDQ== X-Forwarded-Encrypted: i=1; AJvYcCUkfjzAM0icCq/vIrT4mPu185Gtc3pjnFGhxpMdE+/DLpuMdsGSXm1qOKlUc3dxRteaKdUM8iUpJ6OZkzI=@vger.kernel.org X-Gm-Message-State: AOJu0Yyo0uS57F8fwYwLPTtGiNV3EtIqxzDQv93Pbfc49mD2OmYHmYyr CsrDQstEVUX6TWQPTgxD42MBdfQCof7/z1JKWhROcXA1vtwlvob8+/9xO7roJylIFzM2Yef5EeS Ka8gNVW9CXHPMe6xkG/XXTGcWBVRaxwlU5vJJuhi1ug/GV30v6U5RvwZUI2xI/l9NhKk= X-Gm-Gg: AY/fxX4q+vpqW/3G/HYmbCY5ZU5938bbdbUJx7lkQdQkpg+VuEb+hLf6verd/r0z9yF sHtgq/l0Pgdt/nq7cbn0zRMujkFGxszjeHmSDgenp4srfjgwOWUxVzXIhv+V4pextgezCwt3Eco guAoT3hO2J0h4b6tO3JZS/lDjOGofHvN/88x/98QXaIcU4oZI6ye30rlLSQoLneGNxqMSMBXoxK wNFRQBbRK4ftEDr5/lkVzpXrjcXNkKAMipvdOWUoI8LxAoTvUoIWn4ioAT1Ey0QW5rqzm8bz6eZ 6+SpXsbmtfFBYHweWACarLVReEr/K+TCaPbuEWPK26ubOjsew8SCXEN+jxVLP7pxqu/PzqU/Say xzQOxGJzc2feRrGxmZ1R0FPeEUo+wdSK7KxRUrsTT X-Received: by 2002:a17:902:e541:b0:29f:1bf:6424 with SMTP id d9443c01a7336-2a2f221ff92mr21207405ad.18.1766130189469; Thu, 18 Dec 2025 23:43:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IEiGPFK5ZZdboKnXYnv1eylTJ0qT4+uxY08hFyE0xqoem5+iOSHGFthiC9xgKwp7nIYzy4c0A== X-Received: by 2002:a17:902:e541:b0:29f:1bf:6424 with SMTP id d9443c01a7336-2a2f221ff92mr21207125ad.18.1766130188891; Thu, 18 Dec 2025 23:43:08 -0800 (PST) Received: from WANGAOW-LAB01.ap.qualcomm.com ([114.94.8.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d4cb90sm14007325ad.51.2025.12.18.23.43.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 23:43:08 -0800 (PST) From: Wangao Wang Date: Fri, 19 Dec 2025 15:42:30 +0800 Subject: [PATCH v2 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: <20251219-batch2_iris_encoder_enhancements-v2-2-371f7fe24801@oss.qualcomm.com> References: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> In-Reply-To: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: quic_qiweil@quicinc.com, Renjiang Han , Wangao Wang , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766130176; l=16267; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=fHQX0/QP2fJhPtUC530tRUPfr5fvxYSI+4tNhsQTpok=; b=xzFhLeuBiUK/TjQ5caYRpgjjUTaoIh2dN4/4dLp3D5qn3s1PhU9RXPRVDJegNiXoq1lMN15R0 GR4nkFp2WuqB74s0LGC5ewDaapqrvAO3WUuY0elKHEBpm2DTnS1Cl0n X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Proofpoint-ORIG-GUID: PzjHKMejV79eY_wL5L3jTsLNttWuTIw- X-Authority-Analysis: v=2.4 cv=A7ph/qWG c=1 sm=1 tr=0 ts=6945020f cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=Uz3yg00KUFJ2y2WijEJ4bw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=QunbDvX0_-zBgmAapgUA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-GUID: PzjHKMejV79eY_wL5L3jTsLNttWuTIw- X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjE5MDA2MiBTYWx0ZWRfX7aya6U51krKY RbqYMlv+TlP58R5migJkJeJ22/sZKjQh19j9n5juI1qSetKUUbJq0/uXBn6szQsxFKgwSbUoGee /p4lPqbJzDdAxlA9tE87fK3ScIqPLlLAO+r099mvJ+cuadd5LHhS51HK1mpIJiSp8g2VcmsXDd9 o653iR0oV2pLBuS28zFuIk4YePoNHb3kfF0NIDoNzK2oXqLVFmEnJ6RyPgI6Z3TDvQVZo0FTVBl w6TkMGfsfG7wAxN/sIw5pOyY+eA53zUBeEEEGGBV5xFNS6i+msTyyqGFa0IBaUk75qHxQCaYV81 6viA/Z6uKPpTnljuLK5YFSOm43lgTnYBOJtDhVPKsqQIzYVCWASQfyGT5gtQxS9dZL+miaZ2OX5 1r0WtmDJxbgKo3Mql6JyM1rOydp3O/sCzuc977m73IkEGbY2b989qzxDzryQ3FjhuOcWyNwGLQV WPqEhyjHhKSfaeGnrKA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-19_02,2025-12-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 impostorscore=0 spamscore=0 phishscore=0 suspectscore=0 malwarescore=0 clxscore=1015 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512190062 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 Signed-off-by: Wangao Wang Reviewed-by: Dikshita Agarwal --- drivers/media/platform/qcom/iris/iris_ctrls.c | 128 +++++++++++++++++= ++++ drivers/media/platform/qcom/iris/iris_ctrls.h | 5 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 25 ++++ .../platform/qcom/iris/iris_hfi_gen1_defines.h | 24 ++++ .../platform/qcom/iris/iris_hfi_gen2_defines.h | 3 + .../platform/qcom/iris/iris_platform_common.h | 6 + .../media/platform/qcom/iris/iris_platform_gen1.c | 30 +++++ .../media/platform/qcom/iris/iris_platform_gen2.c | 30 +++++ 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 eae4fedc929e980eb001a5a6625159958d53a3d1..428203af725ab5697ee42b5adf9= 557c65fafd7f4 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -108,6 +108,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; } @@ -205,6 +211,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; } @@ -1025,6 +1037,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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 4d9632ba86bc8f629cee6d726eb44efcdeba2475..139e7a9321d30d3e348671f99b0= fa81afed4827e 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -693,6 +693,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_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_defines.h index f6a214a6815420f299be70f80732943d02168f0c..2b8c87c25a066ead30bb1b134bd= c3fe1e84e8f05 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 dd0a4210a2647ff4dadf8d67b71c6f4a22deb548..c48dfb6d47734fadd4f2e4123c9= 3560f55355b86 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -29,6 +29,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, @@ -148,6 +151,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_platform_gen1.c b/driver= s/media/platform/qcom/iris/iris_platform_gen1.c index e7645bd60eb46785e0110a34f3257f7c37bbfca5..13cee5f72a443b85136d30b41b5= 89aeb0db8eb9a 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c @@ -249,6 +249,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 struct platform_inst_caps platform_inst_cap_sm8250 =3D { diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index 585f0aedc0eb5e80fd108929e1861101a7bab2be..99d8e1e59e6bfd5e4ab0fd2b583= 1f74c54b6e87d 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -637,6 +637,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 struct platform_inst_caps platform_inst_cap_sm8550 =3D { diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index 1e54ace966c74956208d88f06837b97b1fd48e17..b7413edfbc5646fbdee6139d1e6= 897d730e2c8d1 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -668,6 +668,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 inline u32 hfi_buffer_comv_enc(u32 frame_width, u32 frame_height, u32 lcu_size, u32 num_recon, u32 standard) @@ -693,7 +706,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) { @@ -1402,10 +1415,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 Sun Feb 8 21:12:34 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 0B1862E54BB for ; Fri, 19 Dec 2025 07:43:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130198; cv=none; b=L8t13lLHuXlY/WjckZ5jwF0wQc07e+8jRJYRuCMPSzTSEUZaIO1Yc1Sr6ZP534MW3kDJZr/oZNqPKuvtIk60GRZn7YjLQs+21osIJ47TtjJ73WyvN/yF3R2pT48kKVzcXJ2Llh2bCMJYeyrKfSJEOaeWscSBZn+PFUqnO+ue0/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130198; c=relaxed/simple; bh=gfSU4DV8gsUj4FijN4PF1OpqyeuI1f12jvR1HgpFGFM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EcRoRfvyAzhotVBlu6VQ/nARDu+TZtVoyfeFJnK7Du7IlLlhk5kJ60lc5sVB7lqc48zsITC7R7sxn2ZAbVCD9G+91ZnanyBYsflJm8wviS73sfcdEf2QIyhKsCBGXkCiHUQOCWMzAOb8cs8q6K1jNoMT9FCH1q2BB2+BX0WBFLg= 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=ObxudSi+; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZhSXZZP8; arc=none smtp.client-ip=205.220.180.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="ObxudSi+"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZhSXZZP8" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BJ4cI5Q3700746 for ; Fri, 19 Dec 2025 07:43:14 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= XoMH0PbrMy+EgWQ6LDLJExgdlr9mTw1ZTRuY0YoKBQM=; b=ObxudSi+8GaWEnTh BVIwpreT5D1RMcNbiWZtvYv6OwYWH7eXZ+l0wty8VLSAbUdSQTS/P1MsbzwERa2Z MyY3eeQ9LP77Zcu8Yz5Fu6WwboKEvACbROAfEootbnl6SCXij4OudU28kBTOwW0q 06XQPvfQxbwtn/9n9MieOyBdlxWT8aHEb8oE5KEWbyTAib+jxf9e2qMeI575hOZp 4vD+01OReeOdrZukcT4saTAq8xDKn5XCfTpa8eMACFFaA7CVcFbmbYgVP6zRhH9r lUyCZRu9Cx5Ctx4DiFYfRJCcUpV5slXVtCb39dkT6DEkDYWGDxbFgrT3ivxhpcHz 2gq1xQ== 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 4b4r2ehqan-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 19 Dec 2025 07:43:14 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2a0dabc192eso28669715ad.0 for ; Thu, 18 Dec 2025 23:43:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766130194; x=1766734994; 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=XoMH0PbrMy+EgWQ6LDLJExgdlr9mTw1ZTRuY0YoKBQM=; b=ZhSXZZP8VhPieb8tjn73cqB/Fj1pQYem9QVC9IUBUV9fW4+Bg268K9tbtg5lNq649I dYFB1C9VuHRVUWjtUDSnXsjt8mpLFwE2ILsozZcp5bA9nSL+wCmLWsag1HsbsVkUeX/4 qTz36b5pLvTgW5PAdKJvs4mQUWINmFtqxU3IOUVvEYavQeZFEEQIyvrvzAxHXYyd8yP+ 50j406MFQFpJ7NAwBlhogSyetE5Le766qHMntKnprFcfTeHj9Xwuw9o9bwh/n8IsWyPM 9T23e6FOdqpgV6PlVW8fxm3HGjoDKK+YA9K56l7FUAIcYPMeEU3i8xW/NK2KSjFHqZzN yOeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766130194; x=1766734994; 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=XoMH0PbrMy+EgWQ6LDLJExgdlr9mTw1ZTRuY0YoKBQM=; b=MwRDVmamCQVQTOBjKm1FDJjZu9GrK5yGN4XHUH8cjYSppS1T7IImRdqpAxJ05mJzwa b6mTN6c80mB3QaG0LCExHUgYaXEqWgv1tZxZb74/FiZM047rYzZ0Cn+rWUzweUxUYNe1 a+4ybusSzKh910jQqkXavpqI6CtSp1hRaQP2o2+2Fr/nvZWiFfbL6T3j2GGsXw7jxlKy XWFrbqJBXyHK8hza3UcUId34bZecLukrcug4yiN/3YZ0BAMkYugBEPR/zAaLQnChOlt4 vIxHBlnVBmxWFRhyPWGgToeM36HPSxUX9TWARI+EXKBCmDx/7+Gq7Nk782CgOebM3SDk 8IQw== X-Forwarded-Encrypted: i=1; AJvYcCXcHbp9z6KGBlceVSUl94feDvQVnw6bxuWP9AXc+3hUB4EhLKusZC0uEwnHMYHa95l2JorWKpXh8OaAZWE=@vger.kernel.org X-Gm-Message-State: AOJu0YzgKBgN/Wi0O783kv+1660I/jng29wOnQbmliIlqBLSjMsQN6Dh +T0BZD3o3QlfuaDmClGCZ/h+IGJydUTQZ2R+z+WthAaxFWrK1PBQuGCAWSwgOJ4a9XO0TUKn6dB c4JrowC3X4kfYjI3aUNUwmVlLnMLMiQ4fb2lryeBdoUdCJHV5px5PyUQQuRyjp2CRmos= X-Gm-Gg: AY/fxX6XLBWOaLkgEnSDB4d9dp0kfE7f1Xgb60MQ7lbP200w5ezwDCPAkxlpWI9X6uA 5pz1N6HrvBhGYO6V5tXgHdBLN8GoQBo3O0plrPHT0G5jKjxShXuzRNp6BDpckZpnvrjMw/tTdgt KYJV+xqdXyCNcVGKsgITbw9M5Z39wmFYoez5kPFm/+ijy8V1cDviCZ8OmMSuVpUiThSrmcKu0Uv 4UbpYrw6rujeWwsoDeDkB90RhckvTHeuUYF4xGhJgU8wGa0E6rU56xBRCsgsXUZkYjaWA3Myw/j ULp+l6Yk/TpogCtdGvJ1ZxQUBjKO28TgtZvwRuVV0yxQ6d3IDxGOt1u2kqLS7Ud80w+/HXBWSDB +wXyQpgagAWCbAjBkLZP/iavdg7dCPPKz3Y//UBLU X-Received: by 2002:a17:902:c403:b0:2a0:ccdb:218d with SMTP id d9443c01a7336-2a2f2214ee0mr19657905ad.17.1766130193485; Thu, 18 Dec 2025 23:43:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IFXInKxSMdaF0iCkxUhfOBpCw3NQUvqObcLRu5KRtF9SeavV6t5DT+nPE829DVe9uZEgKoEeQ== X-Received: by 2002:a17:902:c403:b0:2a0:ccdb:218d with SMTP id d9443c01a7336-2a2f2214ee0mr19657535ad.17.1766130192937; Thu, 18 Dec 2025 23:43:12 -0800 (PST) Received: from WANGAOW-LAB01.ap.qualcomm.com ([114.94.8.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d4cb90sm14007325ad.51.2025.12.18.23.43.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 23:43:12 -0800 (PST) From: Wangao Wang Date: Fri, 19 Dec 2025 15:42:31 +0800 Subject: [PATCH v2 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: <20251219-batch2_iris_encoder_enhancements-v2-3-371f7fe24801@oss.qualcomm.com> References: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> In-Reply-To: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: quic_qiweil@quicinc.com, Renjiang Han , Wangao Wang , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766130176; l=8694; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=gfSU4DV8gsUj4FijN4PF1OpqyeuI1f12jvR1HgpFGFM=; b=Ry/yCkebnQIoejvrNhNTOcN83UGtBq84zY7VKQtpjzo0y++AQaMhTVrPo/PWFJ62tl1Zcj2G8 1wgWs9uNyKtBNDTINIf8i8vYhahGnGVf8HNCMpVAhxPIpVZGjV33kek X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Proofpoint-GUID: qt6iLqNSIxku1Gf1ZZU8_BWXlnCuhL1n X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjE5MDA2MiBTYWx0ZWRfX+dxflP4NVbxE 3qhZFy/TsYEFTCqWarJ57HnRWchgtOg5Id6rl15W77IO1+l1x0wQRQA+psUz3cw3pJl+dSPYdp6 k4bJdI9vE4/vBgo2Fq/nOQu0TA08HsYhRHDNRjuSTND4y16jbWuvQV5hovz8tdue0MYmHHxti3u yns9dIMf+gYyJAyTF8NgqV/vbIIxqjJeJdRa7q0PfTsn6ZPpYvcCfwGrO2Gxd2zy3p1X7AAwor7 Cv/LJbu+U5X4zt8t1M6crBw67dSLM9AfU5g1+nUqKI1bcQ4g3dGjtovDb5FAthwwNMsDYgDvpuh YKb+Vbu9rgWOvqSVq6BcoFeabgZ0BOUmJHg9/CzKN6szZmRxyV8BcCkvr4DCYK5xp9LIEGvWQuH xwR+iP3QggoQwSKHvYIREjy4yPYz2mGix5Yb+NjfzQ/q7bESPYDobrrLa3P8wgkHSu/4m8V/hCy WY6e7OsE4jWuMeD95HA== X-Proofpoint-ORIG-GUID: qt6iLqNSIxku1Gf1ZZU8_BWXlnCuhL1n X-Authority-Analysis: v=2.4 cv=EabFgfmC c=1 sm=1 tr=0 ts=69450212 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=Uz3yg00KUFJ2y2WijEJ4bw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=pbVt0xer8RvNRR6Ob3QA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-19_02,2025-12-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 suspectscore=0 priorityscore=1501 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512190062 Add support for B-frame configuration on both gen1 and gen2 encoders by enabling V4L2_CID_MPEG_VIDEO_B_FRAMES control. Signed-off-by: Wangao Wang --- drivers/media/platform/qcom/iris/iris_ctrls.c | 30 ++++++++++++++++++= ++++ drivers/media/platform/qcom/iris/iris_ctrls.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 8 ++++++ .../platform/qcom/iris/iris_hfi_gen1_defines.h | 10 ++++++++ .../platform/qcom/iris/iris_platform_common.h | 2 ++ .../media/platform/qcom/iris/iris_platform_gen1.c | 18 +++++++++++++ .../media/platform/qcom/iris/iris_platform_gen2.c | 10 ++++++++ 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 428203af725ab5697ee42b5adf9557c65fafd7f4..02106a4c47db7a8b2e6461acb9d= 24a22291ff3cb 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -114,6 +114,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; } @@ -217,6 +219,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; } @@ -1153,6 +1157,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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 139e7a9321d30d3e348671f99b0fa81afed4827e..fe51eccb903be146e83a4fb2faf= 4b4092875dea4 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -718,6 +718,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_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index c48dfb6d47734fadd4f2e4123c93560f55355b86..34deb32eb5be0899fee779ff99b= 3f4b8bd91529f 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -154,6 +154,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_platform_gen1.c b/driver= s/media/platform/qcom/iris/iris_platform_gen1.c index 13cee5f72a443b85136d30b41b589aeb0db8eb9a..78f3a44f4ef037a5291330627b3= e94750b624f4d 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c @@ -279,6 +279,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 struct platform_inst_caps platform_inst_cap_sm8250 =3D { diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index 99d8e1e59e6bfd5e4ab0fd2b5831f74c54b6e87d..56b6a73bff8ae8e1da06a7b5363= 2712932abe5bb 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -667,6 +667,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 struct platform_inst_caps platform_inst_cap_sm8550 =3D { diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index b7413edfbc5646fbdee6139d1e6897d730e2c8d1..b5fb616916e5c7bf46998fc1451= 0af9c9341cf10 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -670,11 +670,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 Sun Feb 8 21:12:35 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 528A42EBDDE for ; Fri, 19 Dec 2025 07:43:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130206; cv=none; b=CuXUjNkblbly4mHkj0acd/nZDbUNOPUujkstwBkQds8fx271wvUS994lLn6wq2sM2YDzeSP85W83GMvsGis5OA240w4fg7x1yAVqtdEdgNU+TpMH6FS/SBkUzbrX16qQTN30MyMUgcOJ05rDtZJrWGKpGE4gCI+3MLksiC2RcGo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130206; c=relaxed/simple; bh=v4Z37At0P2FCJU+lQh+vVwGMbiPTM2I4IJAZIxp3rdI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=efCeDFG8NMzRweQJNJM6iR1pCiflj5TPo4XEVif55oG1DOT0QTDZwJ4nsJjNzzQz5PiKsjyrGZbgcDNK3NqlPpKC+n6X8HfcB4JZj+lNYqZgeQe7EGQ/AjIstXCM2U7lZPu/8SPvfTIUddXvzy5AsbDSy1X1uNyNnX8OerrLzt0= 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=dnT3L82f; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=S2dfH7BX; arc=none smtp.client-ip=205.220.180.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="dnT3L82f"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="S2dfH7BX" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BJ4cDm43991646 for ; Fri, 19 Dec 2025 07:43:20 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= HmhRL0nmmO8AGcYV7rGjOh6uBjrLcVpD+L6qkI9PYPg=; b=dnT3L82fOWF+O9vy NlY8f+rxL9LL7VOsnJiZSfqrnesQKkCltuK1t0wYygMzLMV4BASi+y04O5gEzm0r KTs/JU+lI1l0YGEWQ9XBkgWVMLeNf6KWXqqmTg60ah16eGWqgDA+rzU0fpzD8f9N uoEsUHEfJ5CV++6HKQEJujw8LeYwJUHtrrM3f5ejn7CCyx7xgTh/tPZgxmEsEtG6 2yK2ycBW4AK7ES4b+EMzHAIQaL7Jlgjbjv5vgvUSU21TnaBf4XYEX9PxB5/UOJFh qKdtiYK9mz6xtRdRKwoS3tBA2TUZ5uB6b8jL04C2EZGz0gKOgovObpXyo/ziIMec v5hh3g== 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 4b4r2d9qfe-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 19 Dec 2025 07:43:19 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-29f29ae883bso21982025ad.3 for ; Thu, 18 Dec 2025 23:43:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766130198; x=1766734998; 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=HmhRL0nmmO8AGcYV7rGjOh6uBjrLcVpD+L6qkI9PYPg=; b=S2dfH7BXQH67K0OWWQvcqTOqY+IMJ6MUI4c7+2TTqbhXWSXPPPDCR0/nP4U5HTgZ2l S1DrfO/KU9QS61dZXa1zDP1aVF50KKmdLJf4eZUzhgYCmwLvNqgXZPAzAEEoAFRp2far FxbwNMNwlCIj+jBG84W6p9w08KGbMh0rsyYItiJs6TcfPmxqNNfqT5uSiKft8WVjcXnO gJy39KtYQwcp9w+ELtJXbSeRJ6IIywjXTdoUQ1JFkt1E5cQAD6Tn4WkJIGZ/vaIxra9D d2LFfjzGHbyh8tLm1M46MHuqSPWPYnVqErAFd/j+TA+cvVWeAPr6nHZH1w464JHwZBe3 m7OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766130198; x=1766734998; 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=HmhRL0nmmO8AGcYV7rGjOh6uBjrLcVpD+L6qkI9PYPg=; b=CQvQ2wIBJdPQknJ32LHTiLZxMLNsRgAPLic4xp62hVos7Jeb2yNFxuJokWsbHVyyhD mIsMcCn9LjWAQspqs2HfFWy5cg/QjUVG8bwADlvSGwVVGG12iLqd+QZHS6dALQOhveyl EOYGev9gb5knmmOZQ2tMHOxuXQVW73yOs32sXY8XNiUXxKEOKHK5TaKnZQ0kPGsbXPF4 XH7O97iY47AxaiK48M2kUenP7jzRsNPmRNAzZMM4QBQoAZCpGWzFylWcy42GIFXh9RKn 2vUWAPyzmbyVN5E0OJNLKIDbYj13ks/SnM4lUi07h2w6+6gb1aL4VHyPCofdBJec8lAh byXg== X-Forwarded-Encrypted: i=1; AJvYcCUtyo859LXuxV+ilC3dmtj+tYuizWhPC4+EFKeUQuWt6k64pdDrCLei6HyznkrZDX0a/W+C8sdMz/WEI5s=@vger.kernel.org X-Gm-Message-State: AOJu0Yyf6T4pE4tikke8HTCHXDFcKoY3SNyxjonbyn5w8yRsYxIpRVh5 er1P81GXlJ9ejf6ip7Gq4buwr3/PvYBo1UyWqbzLGRbOWMJLuUoscAesUhcEAqhI6399+xHGOC+ n7XFzb8h/3bRSpgZF+XSe4sbh8TarFy9FYg0wtA4HXPVWUFThlR6YdVsQPOkPdW2X1osp80NFWL 8= X-Gm-Gg: AY/fxX7R4Wh7nqlcIxmDG64ZNZhCbnBU0M2e2xNWlDAlKtCwxhbo9iUy7C26djAONzz DFEf2azD7BOhyIRfxQLi2K5an20qB7y091IO0YWj/G4FYqKjYT3TkLalHjT+5WcShEJcZVe/U/e 7TzPgDDqns5DFvD2esic7l16Mi7oXE58VskQkSodAozmn0i/44barIGqcqmHYLd/Nt2g1Ko1VCE y1nCSqd3EeqE0B77yW3B8NvUXeD2mFRkmBOV477VqzRxf145kGRQ6ThY8fgvn1nQYm1yNk9siZ6 gv1fuxHZpssvohj2PfVDuOYx5PvQ9/VN3GpisAVp1rP26MASUIvZYe6/g2fkcDwqb23Vf9cyrYR VpJbvOslutXfN/8zGg5u2RBMWEI5FQzxh7/GX4bGq X-Received: by 2002:a17:903:228b:b0:2a1:3895:e0d8 with SMTP id d9443c01a7336-2a2f2a5934dmr15836905ad.60.1766130197855; Thu, 18 Dec 2025 23:43:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IH3b2/WJ2rThOXyVXImEztrbvkeb4KXxH9QE121yzQyT7HrbwwpWNNuWIjh/9gG3ICA5WL+CA== X-Received: by 2002:a17:903:228b:b0:2a1:3895:e0d8 with SMTP id d9443c01a7336-2a2f2a5934dmr15836575ad.60.1766130197234; Thu, 18 Dec 2025 23:43:17 -0800 (PST) Received: from WANGAOW-LAB01.ap.qualcomm.com ([114.94.8.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d4cb90sm14007325ad.51.2025.12.18.23.43.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 23:43:16 -0800 (PST) From: Wangao Wang Date: Fri, 19 Dec 2025 15:42:32 +0800 Subject: [PATCH v2 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: <20251219-batch2_iris_encoder_enhancements-v2-4-371f7fe24801@oss.qualcomm.com> References: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> In-Reply-To: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: quic_qiweil@quicinc.com, Renjiang Han , Wangao Wang , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766130176; l=31190; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=v4Z37At0P2FCJU+lQh+vVwGMbiPTM2I4IJAZIxp3rdI=; b=XNdfmCRRtgtgvbZ4ayCasG8Q3U2PxC2adDXN8pqJNgUZnrNPDbMa+CFOUz7vBZs0bAGE8VjV2 qUPP8GYh+cMDi3TL5WJL6ETgHSo4k2jMmSuahJzVQhLqaOAnhxKQ0PW X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Authority-Analysis: v=2.4 cv=AcG83nXG c=1 sm=1 tr=0 ts=69450218 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=Uz3yg00KUFJ2y2WijEJ4bw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=pEw79mLSGxr9eRpYBYUA:9 a=QEXdDO2ut3YA:10 a=GvdueXVYPmCkWapjIL-Q:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjE5MDA2MiBTYWx0ZWRfX8HCq5fa8WAGM kiO/4RYqsmE6OIBp43tmdv7Dm0zoFYJEbbY5tXSYK2OJV6lnO0SeGxx6kR2rnTsqyu9OMa7qGvd emZFwIqiiAF2NxLHL+p1leVAgtZDNaHrE5+wChXOHO2mGQakdO7KVKPbwzJLjLChGnkvi9QNiCD 7ZlaS0eyMF+MqXxck0u4JjmipFLE59Jjf6bLstFFtkRctKjgeyKS+CGvHG9rfu3oGoo490zAH4I bSeAbJ8wfhxm45kewtyn0nPfADi/OpvCk1ZISOuFrCIXkzCqpwLxF2JdSLU4n/ZnEJHkylVyhzp /hwA9q9w15phSUGz6Py61q2ox2tUcuGiw1Nw3kls/C6CTUYAcBEQjGUXLmsVRqRpu7WmEH5KEi6 CzL6y+TA7p7jCVTYnj8aJN4PtehxRMk8LLm8X2w8oq+6PHvCuRnSt6XOtW1sfgznHduwqqY9WIn egUhaOMN0XQ5CWtgkOg== X-Proofpoint-GUID: E0TzjQFKjoqcemT7hTGO9j4jR72HLqqB X-Proofpoint-ORIG-GUID: E0TzjQFKjoqcemT7hTGO9j4jR72HLqqB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-19_02,2025-12-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 adultscore=0 phishscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512190062 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 Signed-off-by: Wangao Wang --- drivers/media/platform/qcom/iris/iris_ctrls.c | 279 +++++++++++++++++= +++- drivers/media/platform/qcom/iris/iris_ctrls.h | 7 +- .../platform/qcom/iris/iris_hfi_gen1_command.c | 21 +- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 2 + .../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 ++ .../media/platform/qcom/iris/iris_platform_gen1.c | 94 ++++++- .../media/platform/qcom/iris/iris_platform_gen2.c | 182 +++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 28 +++ 10 files changed, 647 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/= platform/qcom/iris/iris_ctrls.c index 02106a4c47db7a8b2e6461acb9d24a22291ff3cb..8d04eb0b52219f5ae609fc976e5= 1f2fb04000a85 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -116,6 +116,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; } @@ -221,6 +255,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; } @@ -567,7 +635,60 @@ 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_command_ops *hfi_ops =3D inst->core->hfi_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; + + 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; + } + + 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_command_ops *hfi_ops =3D inst->core->hfi_ops; u32 entropy_mode =3D inst->fw_caps[ENTROPY_MODE].value; @@ -1183,6 +1304,162 @@ 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_command_ops *hfi_ops =3D inst->core->hfi_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_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 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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_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_command_ops *hfi_ops =3D inst->core->hfi_ops; + 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; + + 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_command_ops *hfi_ops =3D inst->core->hfi_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_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen1_command.c index fe51eccb903be146e83a4fb2faf4b4092875dea4..5d7d7856b35f4175225256c2aed= 619527aa5f2e8 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -602,11 +602,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; } @@ -726,6 +725,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_defines.h b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_defines.h index 2b8c87c25a066ead30bb1b134bdc3fe1e84e8f05..558ad8ee76d7fb0a79b13dd327b= eb414b3609d3e 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 0a0d4ace0bb6bee6ab11bd47fddb27432cd524f7..f4aa904f94ebb3c87bcdeeb6c37= 32b616d030b96 100644 --- a/drivers/media/platform/qcom/iris/iris_instance.h +++ b/drivers/media/platform/qcom/iris/iris_instance.h @@ -73,6 +73,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 { @@ -115,6 +117,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 34deb32eb5be0899fee779ff99b3f4b8bd91529f..4b98c209fda49bba6caa84b8398= 09062e713fe5a 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -32,6 +32,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, @@ -156,6 +162,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_platform_gen1.c b/driver= s/media/platform/qcom/iris/iris_platform_gen1.c index 78f3a44f4ef037a5291330627b3e94750b624f4d..ca0c7030dd165f59cdef4a4806c= 9d04cba7f0fa4 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c @@ -142,7 +142,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, @@ -297,6 +297,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 struct platform_inst_caps platform_inst_cap_sm8250 =3D { diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index 56b6a73bff8ae8e1da06a7b53632712932abe5bb..02edb6e53ec853bca167e350618= 5c792bb9c9531 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -313,7 +313,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, @@ -677,6 +677,186 @@ 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, + }, + { + .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, + }, + { + .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_LAYER5, + .flags =3D CAP_FLAG_OUTPUT_PORT | CAP_FLAG_INPUT_PORT | + CAP_FLAG_DYNAMIC_ALLOWED, + .set =3D iris_set_layer_bitrate, + } }; =20 static struct platform_inst_caps platform_inst_cap_sm8550 =3D { diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_buffer.c index b5fb616916e5c7bf46998fc14510af9c9341cf10..c962042518fceb0f82a48956df0= 1c8f3cd26df99 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -670,6 +670,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 @@ -679,9 +681,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 Sun Feb 8 21:12:35 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 B42252EC095 for ; Fri, 19 Dec 2025 07:43:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130210; cv=none; b=L6QWsfniEOvSajIMXiLtTWkuy7945fjNIM7MDKmp81vEbhelG8Pu5lWTz//bWAECfP4uQasnsQ9LdIYCMG0MR7qTiawpB/Q8WJH01jEr5Nvorche4ILu4y3NgpsRfch+FwALcY8P5Ut/4BZuJL6gRF49HtQ8DUXyTdJD2PB0i1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130210; c=relaxed/simple; bh=PYS22VIwFP0s6+Vo8X1pkqgPgtluf+W9+be/fX023ao=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HLD0H2q2p1tOcJ6mP38oxSVT/PYLs0URcthHNp+qkFa9fggEF1I0FD7+1hQuGPAQWyfVG8Vazn/EDSJQOKH9uwtwwy0R62VJuoZr5wywHBu7ICL7npq5Bjcv9C5ooUynQp4jCJt+wiNplISebxRmckgrPxI2lNbreYAY7dtWkTE= 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=XZhEDahU; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=FOpJegOt; arc=none smtp.client-ip=205.220.180.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="XZhEDahU"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="FOpJegOt" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BJ4cAY13975656 for ; Fri, 19 Dec 2025 07:43:24 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= CJ+6NY3RlmXBdxBX+tLnOKNxo2p9RX/rTmakOVflSqo=; b=XZhEDahUn1l/iW1a gOShoI0c2Imwhj+h0ceRqiVrDTW0P0FVKZBQ245owRJB54uSrr0D2LS7FkOh+veA KxpV4ROd2F/vdhJ+sc53SYYT3PygQrzWDVVOGEwI/7ZCQKysWvJMHu1oBi0Y/YRO tYz6mAxAN2Iu57TqcgJj9ojEfkR062RPOi9H2SHb8M8cAeIAoV/Dq9x6C3IPErqk gqZh3pCm3TVWR9Q5aTh+DTHr1ihtl/a32vJWMw2Yn5DvoHEYN40Xc5NbBCJBUxyr mqPeftzRwzWYlB0ITGTZ/SehKRcbo53n8g/SIW5l5UjmBk0e1cf/qqFNVyGllN5+ ng0kYA== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4b4r2fhpmu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 19 Dec 2025 07:43:24 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-7ba92341f38so1828443b3a.0 for ; Thu, 18 Dec 2025 23:43:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766130202; x=1766735002; 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=CJ+6NY3RlmXBdxBX+tLnOKNxo2p9RX/rTmakOVflSqo=; b=FOpJegOt+PdpeGOhitDyyoDHzXn2GXIcCSdoaUhm3pUMNz2js/SeTJ5IgB/c5MGwh8 fvOcFwgQY7mJ7IWOGLuqYkckSRD0oRMvQUgaIcYmcVAuYsvBNhBd6xzmQ2cgdVncjm7w LkSCX3t4S5DVt/Vl/0ZJWwcNe7P3Rh43IKTu4GpgQ7ZTe4gH0aPG1WtgFl2n2f4yn+rr Pa5PsleauQNMq4kG2i3WYF15I9a6AhMRAK7aCn3/eKo2Nv+AuRwKSMftjGfROZxjJRpn jYd+++rIPE1BErw6syaJaCwtPBFkTd8A1KUgHs2ozCsPfTLxcWwFTREQPBVSw05LsKxK a8PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766130202; x=1766735002; 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=CJ+6NY3RlmXBdxBX+tLnOKNxo2p9RX/rTmakOVflSqo=; b=Lgp/Qmtg5ygRIhkJjBQoz/K+9U61tBK06oaX6cBcnPiwmWl6IRhXrCes+Ui67zCynl 6oCCYIj+PrtoqFRQ6V3A7hWPP5R5je43bWZJiKpAE3C2RJloK9FwKrovDdv6m80z+eOm gnjJR9XImOIe3DIgCfabpQF8Sn5KMY+IC74pPMEyZ9xgMf19Cdg3VNUqrcyXMk1YySXQ tRveaba3kFAtUMW8q25ar1FGjbbPb9EtPKmT/zv6WQij7HVXtZflqlxzEIYS0OGLQU8Z 4fP7sVi9E7YQYw9SO9EKVnvlWvR5hCYlwmvDDZ7mtgPDLOsKdvPjFyd/GO8aS4952ioG 4DMA== X-Forwarded-Encrypted: i=1; AJvYcCVf/SNXJKF4Maek+kXvcqa5tsElhXb4dcyhcN9lesDPQBieCCe2Ux3bsSNVicTgdBHkihjrHfsJFcHtBH0=@vger.kernel.org X-Gm-Message-State: AOJu0YzNWC5lTpMYwRKWVSMKhngVMmUPlTEb0Cm60+3w2v1uYXdRCbaH D31nAqcGcPaftgPffSMXdiyolWgmdceyHxC3+3Ue04i6mSEe+6QzrPiM//KvyOyFkjOZqMx9wL6 fHGtIKNJKAVIeAAJC5hvQ65KKUKcKyfEnvmIDnsHxYGKFBYBONErOws6C8X1wzpSKUhw= X-Gm-Gg: AY/fxX5t5d8ARD8r+GFeb75te39LfqDQjJOlptldI4cgrVMNEaeTcKzVqi9UTy8oXxK uEdJxEPfMmrs1CKSty2qAi+KgUDSAt+IHccPBS7Os6OnmW9sWl+r0KpMacP4/ULiIHdxwqYr9Ir 2HcA2Q9zUwPMSr9mO2FyEXM18WZFPU055qFFWkI8dceRxA1cmlfXvhMrfXEIfcd4Jxc0CT4MmpL o+ZnOsOCJ5T0NZoFemFMhdCT0OYhMiKp6f1ZfffugzXSflvMpMrtXbsRelf7Sf29u2HD1tqxMRI Sue9EqjNSMeyLuEkmd250tBoSq9k+ecQ8FugOL0xLEFm/ZU+ecu1DxIeyhy/epZDX16RBef4Yle /mngjvf6nPdDj0sfYZgENPqFtC731IRS5BGK8bsjs X-Received: by 2002:a05:6a20:1611:b0:371:8e6d:27e1 with SMTP id adf61e73a8af0-376a81dbf37mr1810770637.36.1766130201787; Thu, 18 Dec 2025 23:43:21 -0800 (PST) X-Google-Smtp-Source: AGHT+IH0ns76M8bn+b3kHqi/JNAsuGmzOPJylqXyRJtXWTlSn9eDVqM0z5ZW5AVfZxHboWB/op0oAw== X-Received: by 2002:a05:6a20:1611:b0:371:8e6d:27e1 with SMTP id adf61e73a8af0-376a81dbf37mr1810737637.36.1766130201200; Thu, 18 Dec 2025 23:43:21 -0800 (PST) Received: from WANGAOW-LAB01.ap.qualcomm.com ([114.94.8.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d4cb90sm14007325ad.51.2025.12.18.23.43.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 23:43:20 -0800 (PST) From: Wangao Wang Date: Fri, 19 Dec 2025 15:42:33 +0800 Subject: [PATCH v2 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: <20251219-batch2_iris_encoder_enhancements-v2-5-371f7fe24801@oss.qualcomm.com> References: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> In-Reply-To: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: quic_qiweil@quicinc.com, Renjiang Han , Wangao Wang , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766130176; l=9365; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=PYS22VIwFP0s6+Vo8X1pkqgPgtluf+W9+be/fX023ao=; b=I7vyOOFank3d2IIPBiUq/fncQ8vEqdTlCHA5+rv1rC6tIRsigJ6NgAgmee1Iocr+K5IjnfQl0 l5r0BSuygUqDriYxrD3Fc939sYjb2lNqDEVJIpJ0w58popfx5SruMES X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Authority-Analysis: v=2.4 cv=NODYOk6g c=1 sm=1 tr=0 ts=6945021c cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=Uz3yg00KUFJ2y2WijEJ4bw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=7zm3FxsWSslHyZ29AF8A:9 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-ORIG-GUID: ZumTAzuqe3L0dvYrjtzke_9rrfVsGf-Y X-Proofpoint-GUID: ZumTAzuqe3L0dvYrjtzke_9rrfVsGf-Y X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjE5MDA2MiBTYWx0ZWRfX2CMWtx/jSwEV 06aaaltwMsY02hERLDYjbEc7udUDbGGROnz16U2tOuqHTRYYo5aKrla/N5ivDGBJ+z5F47ldxpu iT7utDGlWuGUrfnXXA/RcfVZL1JxtvpT7BRvJ1zf/NPszx9arqQ3lsYCGg2x5NEvw8RfbkwDA/h QQS0f016Tq8+VSV9tNtU33+uJFly3iyNBPFDXp+L4jVlrfeexbUhaZeQOyONImXVc2HwHX227MQ VMgI4zO5jzH0R5hWs3GouGs0vVy5Xz6KDglmcVbehfXEOrb4XkB3yUcqyl4vaS6qhbbSfbtDGiF CYZrUA4Aa7ONbY7vcLWApw98FBcb3IybYnomnd4Lo+jizGtonkYMORifnW0CDabDIshdu3f84cR rKSFvbi3qSNoGUaZj0Nali/RqLutdGB1Lww5pJVnP/OW1jmH7H1WgSYzH6g/3X7BcZpDdnjwp7e 3dJwrnS+5fwPgRAYtUg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-19_02,2025-12-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 suspectscore=0 impostorscore=0 bulkscore=0 adultscore=0 malwarescore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512190062 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. Signed-off-by: Wangao Wang --- .../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 5d7d7856b35f4175225256c2aed619527aa5f2e8..08c99f9455cd6cee3244d3ca133= 4d478e31e1a26 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -483,7 +483,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; @@ -496,14 +496,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: { @@ -512,7 +512,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: { @@ -531,7 +531,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: { @@ -541,7 +541,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: { @@ -550,7 +550,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: { @@ -558,7 +558,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: { @@ -566,7 +566,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: { @@ -574,7 +574,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: { @@ -590,7 +590,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: { @@ -598,7 +598,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: { @@ -606,7 +606,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: { @@ -625,7 +625,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: { @@ -635,7 +635,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: { @@ -660,7 +660,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: { @@ -669,7 +669,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: { @@ -681,7 +681,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: { @@ -689,7 +689,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: { @@ -698,7 +698,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: { @@ -707,14 +707,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: { @@ -722,21 +722,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 Sun Feb 8 21:12:35 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 8305B2ED848 for ; Fri, 19 Dec 2025 07:43:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130211; cv=none; b=qDnS0q2TEx6iB2eQIWKX52PveGy03DmEILYjjec+fJXJVKUAhZkhlD4uFUoQXWgEsIn/gafmfTXrPLSAvzMVPvPiBZoO1pM8Wo2tdX+g06iqcbFubqPPVOz1JNsUHCd9gsgwbcB7eSJLmI3gv9goljevg47hsxsxHYjBy7GH8lM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766130211; c=relaxed/simple; bh=uIMTSmtJoVkGUl0RGol1bMIhEjXPmF2zePxvZdQhLiU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Gepdp1+4nUiVO2h1zNlPEEMWbYwdTauPjA0q23zlVDlnBFzJpb9/GacTkVosBowCsSfBVsxN2H3fzZ+arNY5GrLVN2TC3ttOFIchldou1+vQHvyZnl9jTl4BEyjCcTGPv/JeYRVWuJm556XTTQyf0tvvrQOHssJuVxIgQhWZU/o= 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=Tr1Z2Ru/; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZrPOJn+u; arc=none smtp.client-ip=205.220.180.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="Tr1Z2Ru/"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZrPOJn+u" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BJ4cg8B3992412 for ; Fri, 19 Dec 2025 07:43:27 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= EvPwkihF9+yeuuXUKkRYpVA/NsYjUy9wnJEg8/IUJzE=; b=Tr1Z2Ru/qOiULuuS LIu8nShiw5+9YW4bF1BLMTL58dt9a+IQ0rGSxOR7r+2RUI5kIEePzCx0u67a1lyG siZM1QlXvou8ACUsWLqJVyv+QFzp0Ga08hqTSuLrtTQNP9Dg+k0B9iO0i91IlNVP sTsQXdbw3y++cLl2WPyvLGib+A4YZn3asnrS5cAMUQpJgNYTArdJm567B8muzzi1 s+NX7hMvHRoFLeb7g9uLu0yeafpL/PJojYGiYdN1p8ihBkggXaAFcuTzVdyZuAnF bCMhY8ni11uaeLJQMuJ4ggL9d8dfnlELbVd7CZUghpL6LecLJ4SbsfX7Micl6Vh/ nz8Oeg== 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 4b4r2d9qfu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 19 Dec 2025 07:43:26 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-29f25e494c2so14616555ad.0 for ; Thu, 18 Dec 2025 23:43:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1766130206; x=1766735006; 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=EvPwkihF9+yeuuXUKkRYpVA/NsYjUy9wnJEg8/IUJzE=; b=ZrPOJn+uagq9xhBWnhRx8pOwDe/X9bE0MUEsTFxHVPEttahuQFykWM/I7E9Axny7G2 8f1Am9UZT0Kb3sqk85igkZrjpaRmCP0UTKjE9zD7UO6ZYY25YMbr3NDNoauj+kAQeWCS kebBf0EXbQml9fbVISVVxdxm66pPDauRZP4rsqEc0jdZD8nuq3MNGqrMBQ2JocckTggZ OkSB391He0+ETAYYsnRwtM1SmHa/4FgmpEVtlUql2NUwTGOAijOuAwXE+KOaYwA8uauQ K1kfqBKnTLHYyugqkiNLnIFZsKg9gvPsJBNW9IjVYJLW8KW14O2oI+/xaCHWQp5pNuG9 Mhgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766130206; x=1766735006; 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=EvPwkihF9+yeuuXUKkRYpVA/NsYjUy9wnJEg8/IUJzE=; b=TOksQhfA+7fl9OGLltGZrQLA2mzdqQVYtapjxSvxdPJEianfXuwWHvkv7V+J8EpJfB 4XhGGQs0S4o3qAX/hBXwpKR/vhNK3T8YcyoYoVBo2rMJaBc9tKe79iQn3DVKCxQkd5s0 iQLZu10VgLaxUaor+MX+fKF6h0gacenUqzCEJBXShdsoa8NyiSzPYrV37/q8G7SIR0IU hENNkfXFchbVEh26BGYWIKvMd1X5RhTF57LFdoi5yyTPSw/Yu9peRkuPRXM3/4+k2jlR csGrujHADB9qPTboyHZeQmSpmeiCQZoR8X6VBi+4YNJh5M8Dxm6iLp84Is+GuMY+R56D 657Q== X-Forwarded-Encrypted: i=1; AJvYcCVCdimGRyyk1Hy6m8469AQqWWGXEjvsVTOIo1wq9pI1u/FYns9G3F+GauHUa530NP4dPYwHd1FhGVXjnI0=@vger.kernel.org X-Gm-Message-State: AOJu0YyiF5mjINmk6Fi6z9MOEw8gNTqzQh+nLb4DYAOW14t4qgcA2nvB SHg9R+b3TKy9Ik9/q1S8aAnkzntaZaFEahett751FRfUG7beBXKJVyf5kuw7qBPf8xwsiW5Ze2o gz/T/n8Pg33bEzwTDlT7wwBxgLhglbUgBxcPVp2CGZGRqcVV1fuAN9s1J8jgVxhBhPJMAruIbiC o= X-Gm-Gg: AY/fxX6dzGkCLftQxN9/n135mcA4XiOevieL5TRYkdmqZKbIoNNM/pU3H3au+Y+CPms P44IMOJDft2tXDnF2wmjw++ADbjGxhr32OIvJJEuf0MTSWMab0wo5oCyoS4Pa0lWu2QjhtUTGzJ /O+ikru1dmAwkxLYjZKEQAti8tetPZLeYEytAHtU8MYlgaDSj0NMy5hOPn0AGaaZ+DS19bGVI02 ZsnEnjQFj0/UtL7z7WX7Pkn984HO+OO7NGtpGD9p/bxgPLkYROPuUnerhBKxV1QnLgnLsBGrrTH Ru9Oki9CpNlzniRcYRPgsK2pVIfLNcow1AIj6xtvq1fDct5EwDb4m2GGU8rHpcBPSsr6UVybN+J ub7pj8NSkqgwSbBRe9+4enrmr+4JgkxqG6xxxSdsU X-Received: by 2002:a17:902:c94f:b0:2a0:d527:4d07 with SMTP id d9443c01a7336-2a2f0d2db0amr24235245ad.17.1766130205697; Thu, 18 Dec 2025 23:43:25 -0800 (PST) X-Google-Smtp-Source: AGHT+IH+ko1eCYY3xiUYKJRpBf66RTUV7GT1KAXGRjRu2KHKw6DGNvX2wWFBl4npMxnoA1UIKnmWFQ== X-Received: by 2002:a17:902:c94f:b0:2a0:d527:4d07 with SMTP id d9443c01a7336-2a2f0d2db0amr24235015ad.17.1766130205219; Thu, 18 Dec 2025 23:43:25 -0800 (PST) Received: from WANGAOW-LAB01.ap.qualcomm.com ([114.94.8.21]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d4cb90sm14007325ad.51.2025.12.18.23.43.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Dec 2025 23:43:24 -0800 (PST) From: Wangao Wang Date: Fri, 19 Dec 2025 15:42:34 +0800 Subject: [PATCH v2 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: <20251219-batch2_iris_encoder_enhancements-v2-6-371f7fe24801@oss.qualcomm.com> References: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> In-Reply-To: <20251219-batch2_iris_encoder_enhancements-v2-0-371f7fe24801@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: quic_qiweil@quicinc.com, Renjiang Han , Wangao Wang , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766130176; l=1442; i=wangao.wang@oss.qualcomm.com; s=20251021; h=from:subject:message-id; bh=uIMTSmtJoVkGUl0RGol1bMIhEjXPmF2zePxvZdQhLiU=; b=Tbe5Ji47HKTOfrbM7WITyBB5sVo/7KDAGSedBno61TnuDcAK1r6YL8tgtHu+T74NW30lESGlQ xS5dH9nbAxNATFSw5qoOPx59pWIer1mjk0HffvKVoKKAjsNrQFcAF/M X-Developer-Key: i=wangao.wang@oss.qualcomm.com; a=ed25519; pk=bUPgYblBUAsoPyGfssbNR7ZXUSGF8v1VF4FJzSO6/aA= X-Authority-Analysis: v=2.4 cv=AcG83nXG c=1 sm=1 tr=0 ts=6945021e cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=Uz3yg00KUFJ2y2WijEJ4bw==:17 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=ihyF2tqwNky6lgPlo9sA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjE5MDA2MiBTYWx0ZWRfXxO/c/VTpMWA+ uPj5629HTgIqUn06CdpQyO7eQs3XUUSg86rrH/2LFhd3/A+gu1H7BtNpDe1/3nabw76Fi4xOP5r 70QN9fdFvoXNwboDPYp4acvWi+HentG7MkeKp9/Aq5Q6Y2osEETOGvd9KS3sdFBSRIlAuPiI+U6 TAX+chyb0o5b85BRBxfUstByUJ+F9VkFMf3vyNlHmJ9+c4ihlAUh2PaMtR7cn5MdrqAhSNSTbW1 K+4im0kJfOqGaAmfEdCJkky5sL226XL1koJT03OeI0Jl9Mt7WTPkqJqLBCa+sD3WXoZNY/b0ZFe iCdDRFBc9NH3wf3bPZ48iX4FvRNZjM6/N+C9NnpKmPXR/lN+WK6eBM8y4cbq7+Z4g6VNVvWv+zd YMAMINp//nljuj+A2ghHqu5kozlqUzn3b9sNuOj0qIq8LWS/Y30x4EAdHoPSmTgSG0ulMfxQAEd 5edzC81H00LE0VyMxLw== X-Proofpoint-GUID: FNAqEKn9SqfzJ8du6PIQNQZyD3toW_H1 X-Proofpoint-ORIG-GUID: FNAqEKn9SqfzJ8du6PIQNQZyD3toW_H1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-12-19_02,2025-12-17_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 adultscore=0 phishscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2512190062 Unify AVC/HEVC handling by computing codec and lcu_size upfront. Signed-off-by: Wangao Wang --- 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 c962042518fceb0f82a48956df01c8f3cd26df99..d3f1120dac8d64abcf5f87bc11a= a368cfb02820f 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -739,16 +739,13 @@ static u32 iris_vpu_enc_comv_size(struct iris_inst *i= nst) 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 standard, 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); - } + standard =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, standa= rd); } =20 static inline --=20 2.43.0