From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A8EB1D7E4A; Mon, 11 Aug 2025 10:05:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754906754; cv=none; b=F5smxAUimSfy/cJftD5SbJjdv2O7qKAPoCbZAalq2RtbJqAPpGWFfoZnV0MGVbozQqySccbQyzEnDj1r58GXJOnwH0reLnnGXqHPFGgDcOQtkKaKLS+yO3ejo4CDZbpBlAs2QVOdeyUd1uo7YexlbbJrSArmNm8n4oNINNYuKt4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754906754; c=relaxed/simple; bh=fxjTEqUImoF53drqVHSEnhgix2VVZt5sV1N0vgMdq8Q=; h=Message-ID:Date:MIME-Version:Subject:To:CC:References:From: In-Reply-To:Content-Type; b=p875TOcagplbZMGX0uvpG6NAx7z5oj0EgZg4IOtnKw6xuTDQtbRxrXc7MBVLZ+46oD/9KfAZTqLiBlNtRiEDnTfTW2UHdPhrfGoUtexaW0l9wEufrvsLoX6SJgjadYnlZ43WdQDvVYZwnn7CANk/afsFc8gUO4XHkr+u2LSecdA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=POVQZITM; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="POVQZITM" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57B9dCCa021620; Mon, 11 Aug 2025 10:05:49 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= jnHSLgJERtsCjMps84k/6BBQYIQdG+I5hvDzioIab4Y=; b=POVQZITMO+sJVEOd LLjNe0t0Rct5aDbi1lXfVB+YPaF09lfP/ZfMEo4dhe8bk6LHawzsL35JqOEvB5iX qynT7euwCA0WJ4upstBKp1Ps8fOEOrCCvSDg/t6cj2WWRtiq1MFt2HEgdXiC00hK FroGo/pSEKrLruR0Vi74I9t3HSyt/PFN22bGpgFmPSfzQCmnYM2ssVl10YanUF65 JfoHxOQnCobzANH4fdJRTlUg+de2FYxpCrPSpBxnpeMCsxWIk2zYBFm8LqQf1ds3 jP6+6bN20IVyStCSHAt80gfRzC9ejiOaFJyPt5w1rVz+OcGzr/U8fIVSCsHV+lee +LwWyw== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 48dxj43y3v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 11 Aug 2025 10:05:49 +0000 (GMT) Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA04.qualcomm.com (8.18.1.2/8.18.1.2) with ESMTPS id 57BA5mQC009411 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 11 Aug 2025 10:05:48 GMT Received: from [10.50.36.96] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.10; Mon, 11 Aug 2025 03:05:44 -0700 Message-ID: Date: Mon, 11 Aug 2025 15:35:41 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH v9 4/8] media: venus: hfi_plat_v4: Add capabilities for the 4XX lite core Content-Language: en-US To: Jorge Ramirez-Ortiz , , , , , , , , CC: , , , References: <20250808085300.1403570-1-jorge.ramirez@oss.qualcomm.com> <20250808085300.1403570-5-jorge.ramirez@oss.qualcomm.com> From: Dikshita Agarwal In-Reply-To: <20250808085300.1403570-5-jorge.ramirez@oss.qualcomm.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODA5MDAyNyBTYWx0ZWRfX85iVX+lWrvsT Cn7aRrF4/AXdipNNpJ4WhaXbShW2J8LWaw7BTJxCxlbrrFGllzlU39N12bKllyz+/DhiuzKjm85 raR3PyooqPz4xrREzjmwP5mJ4XIBHlxP2AJ1yVt/HkR23RsmksJOzeTETwUQ4sPQSa1N6cvjulH j/48BBM8utX3YLVobFZkfl/sTYv9gP2gGFVognw4xQSQUXVZC+xfPDv3jNmeV5FJEnKB78dBSBU ZdVFL6aCOCCqckpZ6vo0T3Lzpwes2X741IZ/IXOuJaQxqXVnYOAYzv/cHVJqTMevTraViz1FSWl m/L1BU9Nd8z8/jy8Ivnl5UdBdjbhCW+D929DBQaO8PBuY50eZzyE5FkpJFXEMsXP8QXNbMXsfpo HlPpnbbm X-Authority-Analysis: v=2.4 cv=fvDcZE4f c=1 sm=1 tr=0 ts=6899c07d cx=c_pps a=ouPCqIW2jiPt+lZRy3xVPw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=GEpy-HfZoHoA:10 a=IkcTkHD0fZMA:10 a=2OwXVqhp2XgA:10 a=EUspDBNiAAAA:8 a=KKAkSRfTAAAA:8 a=COk6AnOGAAAA:8 a=LzSCczN5UG7F6-Q5to0A:9 a=QEXdDO2ut3YA:10 a=cvBusfyB2V15izCimMoJ:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-ORIG-GUID: y423bYYgqOahd-89Oinr1AggfxW1OLEE X-Proofpoint-GUID: y423bYYgqOahd-89Oinr1AggfxW1OLEE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-11_01,2025-08-06_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 priorityscore=1501 spamscore=0 suspectscore=0 clxscore=1015 phishscore=0 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508090027 On 8/8/2025 2:22 PM, Jorge Ramirez-Ortiz wrote: > Populate the HFI v4 lite capability set used by the AR50_LITE video > core. > > These capabilities define the supported codec formats and operational > limits specific to this streamlined VPU variant. > > Signed-off-by: Jorge Ramirez-Ortiz > Reviewed-by: Bryan O'Donoghue > --- > .../platform/qcom/venus/hfi_platform_v4.c | 167 ++++++++++++++++-- > 1 file changed, 151 insertions(+), 16 deletions(-) > > diff --git a/drivers/media/platform/qcom/venus/hfi_platform_v4.c b/drivers/media/platform/qcom/venus/hfi_platform_v4.c > index 41e4dc28ec1b..cda888b56b5d 100644 > --- a/drivers/media/platform/qcom/venus/hfi_platform_v4.c > +++ b/drivers/media/platform/qcom/venus/hfi_platform_v4.c > @@ -246,28 +246,150 @@ static const struct hfi_plat_caps caps[] = { > .num_fmts = 4, > } }; > > +static const struct hfi_plat_caps caps_lite[] = { > +{ > + .codec = HFI_VIDEO_CODEC_H264, > + .domain = VIDC_SESSION_TYPE_DEC, > + .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, > + .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, > + .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, > + .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, > + .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, > + .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, > + .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, > + .num_caps = 7, > + .pl[0] = { HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_5}, > + .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_5}, > + .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_5}, > + .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_5}, > + .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_5}, > + .num_pl = 5, > + .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, > + .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, > + .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, > + .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, > + .num_fmts = 4, > +}, { > + .codec = HFI_VIDEO_CODEC_HEVC, > + .domain = VIDC_SESSION_TYPE_DEC, > + .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, > + .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, > + .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, > + .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, > + .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, > + .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, > + .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, > + .num_caps = 7, > + .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0 << 28 }, > + .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0 << 28 }, > + .num_pl = 2, > + .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, > + .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, > + .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, > + .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, > + .num_fmts = 4, > +}, { > + .codec = HFI_VIDEO_CODEC_VP9, > + .domain = VIDC_SESSION_TYPE_DEC, > + .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, > + .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, > + .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, > + .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, > + .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, > + .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, > + .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, > + .num_caps = 7, > + .pl[0] = {HFI_VP9_PROFILE_P0, 200}, > + .pl[1] = {HFI_VP9_PROFILE_P2_10B, 200}, > + .num_pl = 2, > + .fmts[0] = {HFI_BUFFER_OUTPUT, HFI_COLOR_FORMAT_NV12_UBWC}, > + .fmts[1] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12_UBWC}, > + .fmts[2] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV12}, > + .fmts[3] = {HFI_BUFFER_OUTPUT2, HFI_COLOR_FORMAT_NV21}, > + .num_fmts = 4, > +}, { > + .codec = HFI_VIDEO_CODEC_H264, > + .domain = VIDC_SESSION_TYPE_ENC, > + .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, > + .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, > + .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, > + .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, > + .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, > + .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, > + .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, > + .caps[7] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 6, 1}, > + .caps[8] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, > + .caps[9] = {HFI_CAPABILITY_MBS_PER_SECOND_POWERSAVE, 0, 244800, 1}, > + .caps[10] = {HFI_CAPABILITY_I_FRAME_QP, 0, 51, 1}, > + .caps[11] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1}, > + .caps[12] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 1}, > + .caps[13] = {HFI_CAPABILITY_SLICE_BYTE, 1, 10, 1}, > + .caps[14] = {HFI_CAPABILITY_SLICE_MB, 1, 10, 1}, > + .num_caps = 15, > + .pl[0] = {HFI_H264_PROFILE_BASELINE, HFI_H264_LEVEL_5}, > + .pl[1] = {HFI_H264_PROFILE_MAIN, HFI_H264_LEVEL_5}, > + .pl[2] = {HFI_H264_PROFILE_HIGH, HFI_H264_LEVEL_5}, > + .pl[3] = {HFI_H264_PROFILE_CONSTRAINED_BASE, HFI_H264_LEVEL_5}, > + .pl[4] = {HFI_H264_PROFILE_CONSTRAINED_HIGH, HFI_H264_LEVEL_5}, > + .num_pl = 5, > + .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, > + .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, > + .num_fmts = 2, > +}, { > + .codec = HFI_VIDEO_CODEC_HEVC, > + .domain = VIDC_SESSION_TYPE_ENC, > + .caps[0] = {HFI_CAPABILITY_FRAME_WIDTH, 128, 1920, 1}, > + .caps[1] = {HFI_CAPABILITY_FRAME_HEIGHT, 128, 1920, 1}, > + .caps[2] = {HFI_CAPABILITY_MBS_PER_FRAME, 64, 8160, 1}, > + .caps[3] = {HFI_CAPABILITY_BITRATE, 1, 60000000, 1 }, > + .caps[4] = {HFI_CAPABILITY_MBS_PER_SECOND, 64, 244800, 1}, > + .caps[5] = {HFI_CAPABILITY_FRAMERATE, 1, 120, 1}, > + .caps[6] = {HFI_CAPABILITY_MAX_VIDEOCORES, 0, 1, 1}, > + .caps[7] = {HFI_CAPABILITY_HIER_P_NUM_ENH_LAYERS, 0, 6, 1}, > + .caps[8] = {HFI_CAPABILITY_ENC_LTR_COUNT, 0, 4, 1}, > + .caps[9] = {HFI_CAPABILITY_MBS_PER_SECOND_POWERSAVE, 0, 244800, 1}, > + .caps[10] = {HFI_CAPABILITY_I_FRAME_QP, 0, 51, 1}, > + .caps[11] = {HFI_CAPABILITY_P_FRAME_QP, 0, 51, 1}, > + .caps[12] = {HFI_CAPABILITY_B_FRAME_QP, 0, 51, 1}, > + .caps[13] = {HFI_CAPABILITY_SLICE_BYTE, 1, 10, 1}, > + .caps[14] = {HFI_CAPABILITY_SLICE_MB, 1, 10, 1}, > + .num_caps = 15, > + .pl[0] = {HFI_HEVC_PROFILE_MAIN, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0}, > + .pl[1] = {HFI_HEVC_PROFILE_MAIN10, HFI_HEVC_LEVEL_5 | HFI_HEVC_TIER_HIGH0}, > + .num_pl = 2, > + .fmts[0] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12}, > + .fmts[1] = {HFI_BUFFER_INPUT, HFI_COLOR_FORMAT_NV12_UBWC}, > + .num_fmts = 2, > +} }; > + > static const struct hfi_plat_caps *get_capabilities(struct venus_core *core, > unsigned int *entries) > { > - if (is_lite(core)) > - return NULL; > + *entries = is_lite(core) ? ARRAY_SIZE(caps_lite) : ARRAY_SIZE(caps); > > - *entries = ARRAY_SIZE(caps); > - return caps; > + return is_lite(core) ? caps_lite : caps; > } > > static void get_codecs(struct venus_core *core, > u32 *enc_codecs, u32 *dec_codecs, u32 *count) > { > - if (is_lite(core)) > - return; > + const struct hfi_plat_caps *caps; > + unsigned int num; > + size_t i; > + > + *enc_codecs = 0; > + *dec_codecs = 0; > + > + caps = get_capabilities(core, &num); > > - *enc_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC | > - HFI_VIDEO_CODEC_VP8; > - *dec_codecs = HFI_VIDEO_CODEC_H264 | HFI_VIDEO_CODEC_HEVC | > - HFI_VIDEO_CODEC_VP8 | HFI_VIDEO_CODEC_VP9 | > - HFI_VIDEO_CODEC_MPEG2; > - *count = 8; > + for (i = 0; i < num; caps++, i++) { > + if (caps->domain == VIDC_SESSION_TYPE_ENC) > + *enc_codecs |= caps->codec; > + else > + *dec_codecs |= caps->codec; > + } > + > + *count = num; > } > > static const struct hfi_platform_codec_freq_data codec_freq_data[] = { > @@ -281,15 +403,28 @@ static const struct hfi_platform_codec_freq_data codec_freq_data[] = { > { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 200, 10, 200 }, > }; > > +static const struct hfi_platform_codec_freq_data codec_freq_data_lite[] = { > + { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_DEC, 440, 0, 440 }, > + { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_DEC, 440, 0, 440 }, > + { V4L2_PIX_FMT_VP9, VIDC_SESSION_TYPE_DEC, 440, 0, 440 }, > + { V4L2_PIX_FMT_H264, VIDC_SESSION_TYPE_ENC, 675, 0, 675 }, > + { V4L2_PIX_FMT_HEVC, VIDC_SESSION_TYPE_ENC, 675, 0, 675 }, > +}; > + > static const struct hfi_platform_codec_freq_data * > get_codec_freq_data(struct venus_core *core, u32 session_type, u32 pixfmt) > { > - const struct hfi_platform_codec_freq_data *data = codec_freq_data; > - unsigned int i, data_size = ARRAY_SIZE(codec_freq_data); > + const struct hfi_platform_codec_freq_data *data; > + unsigned int i, data_size; > const struct hfi_platform_codec_freq_data *found = NULL; > > - if (is_lite(core)) > - return NULL; > + if (is_lite(core)) { > + data = codec_freq_data_lite; > + data_size = ARRAY_SIZE(codec_freq_data_lite); > + } else { > + data = codec_freq_data; > + data_size = ARRAY_SIZE(codec_freq_data); > + } > > for (i = 0; i < data_size; i++) { > if (data[i].pixfmt == pixfmt && data[i].session_type == session_type) { Reviewed-by: Dikshita Agarwal