From mboxrd@z Thu Jan 1 00:00:00 1970 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 22AC73BB128 for ; Thu, 9 Jul 2026 19:37:19 +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=1783625841; cv=none; b=u8N8wpHwiMeJsNaieLrWohTZwqjLFISsPrHSZvWJ9RLvz502twCj3XnfUVKpJ+5Bi09hYx/vaqr18s2bMshUBOd4lfvZVv46TbMycfJRYdhoFeGtKVhVq+cpCoP2BI+wzWJozeaX6wk2fmdG78Y1yJwj0RlJuHleKrHkSrLDtfc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783625841; c=relaxed/simple; bh=ApbC40tJ27UQispiaWx7l8/PqpwgidGsxfrbIX5Rw3A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oTtpvG8/N62zCJYHUSL430SYZ8hKeVBshm0tgL6a3LaBPvA9nFiLXd8t9mmddpu5AaxYSBBINz12upr8IailAkv4ZLv0TU8d6oydA3gVxKWxtMMh+RKaW6R57BB8wLikMCp6+36NZgZtzyh02EccBT4F1ye+oZ7Dho0VQnN1Mg4= 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=ER+nhUjl; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=MZqkvYoH; 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="ER+nhUjl"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="MZqkvYoH" 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 669HYUuA2331635 for ; Thu, 9 Jul 2026 19:37:18 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= rLlmQS3eajT2FPwUO5zF0ic4Y+7UjqDurjwoCr/DV2Q=; b=ER+nhUjll4PIQv+3 S9bRhzAAGxlF6OVVhuPPgEoRJgcCgMT3zKhlZ46XoTeFj0TsNJDwjAytJ3ImjmYr nhmdR8ach+Y5z8dGRn9W605+xb7IMKOR7lGYGpeD8Hgom4dgIO/yEwS5VY8O7lxS pL5dOB0IOF+Vt/wKD1jDM3wu3JUDTc0+cNOdK8cIe7jaLQAweR1flMLnmWMeJtba +GNQreeF7knkOqCM5/GyE2H1pIUSL9MiE2iFlQe9il/ipxlmHYmAcHtD8TUgaxLb YudfKJG6ahA3HIVelp/QyD0SjAQHecox1EO3nIx7Tvwqcos4lcauquEyjkOHnMku rfiwUw== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4faf24rx7q-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 09 Jul 2026 19:37:18 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-736e9030d93so183487137.0 for ; Thu, 09 Jul 2026 12:37:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1783625837; x=1784230637; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rLlmQS3eajT2FPwUO5zF0ic4Y+7UjqDurjwoCr/DV2Q=; b=MZqkvYoHrzEFo1/f+nchQ3IiXSgNGpQy+Iia644RssM8RHvITRriF8hJG47Im/Adc3 p1aibDtgckmuLIBKJ5X3GyqIyjmgQ4//B7eyTagUO1VGNumgrCUpLl+UX0gBj9K1/53r BQTV1XylAUCb0/j0IXkMkrkc9Oj4UrMepqnC3z2oFhlsFi+T5iBMEtPn/N9DiBa9kR+g j3F9UDr3gqT2NzwVCtkoQmu5mRchLwXToBiNJObRiolduJF9gy5ALgGVU3czPcdR+4S5 X3WgzZdPI/gZPAV+2aIEQtZFKOrSQ9YBEo7pBHWCNvGZhe6KU13ndkijRAhquvsdPiCA E/lQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783625837; x=1784230637; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=rLlmQS3eajT2FPwUO5zF0ic4Y+7UjqDurjwoCr/DV2Q=; b=XjqdZyplYKHW5GBU9EiVlRN+etehuGLiM/Mr2y/BUMtM2FS+290xcR1GOEbAMkhAVP tQL3woSa/5RcSjuwWVlqYaoganqXEHaIyUXhphO06jUb/5s+JUCVvf4MUZjHlHR/x5PJ A3/nWViYkPrrmez0y3MAsItqQ0nBpHmmQFGp47DnyAgjDKZP/Cgqo8zRNIIR/t3Y2dIK pvK9HRqNXTXHI7YtDSRj5gB+kOc+kebBnz3LMp9zwJvUJufRAOwoKOndy4uMjrA7v101 NT/CRFqmxWNKBZXL5/+SRlOn73WjnwwMxKsk1rUVDisDtQLguUHn0NYzPIYuxD0j6+Aw zRSA== X-Forwarded-Encrypted: i=1; AHgh+RpiM6BB+Sc59Q774QoxHscaQKbSlClgvgT3tzo8NfQCRoa+9kCcgpRJGJ0hqhVd3/FNl+Ytpp/fvGQ5iiw=@vger.kernel.org X-Gm-Message-State: AOJu0YwSZ+4Nt7ZqLhKmTzIsLdxRC71F8NzrN3LHVu3fDvD5yfZ67JHL EOOdJ2Ja9MAdnSmVvSDonBy/tGMueuQouKsyTeHrTVhovsiAPhPcfbFWTchXEzr8RF8C8Ik2tQZ 63GaNXHsNGq8xkQ7mkWKr/YmpmSCo4MlAbAAXEKOocgOALLDHu3dWN8kwdg59pgqYNTc= X-Gm-Gg: AfdE7cmygYS6Sqx+6vi3JUo7qulMuosNmXLPaUL6R5KQec+QeyrNRJ5IkCAVrIRLgj0 n4IYlye02gRaw2Nj8jPfMgXCmPZVOd8s/zAr73QV6yJ6EXJNmIHy37yFLVIy/DzvzVgI4a2roed IcG7dlB/bgViAmv4UWFbEXHnewxevjHHEGZBN9Z1LotOATeolXlgw4+NkT6MtG5WcFEnUNJ60HG gRSpS8AV3EzPpi8qrGMkN9JGKsD4UTwtcY2olgJG9rTLKASFpbH8Beit6MF3YQTDJagnOvzIy/r 2ebk1nKbwIKUYYtFtSUKD+p9LcKOBbfTs64mUc2rM+PnYWUBeZhYaUNyhnUEqGT94+hf0qasGQE 2g+tSKQu4apGhYtn9W35Wyu6+vw2zZdJFQ+qwZDFs7vsETAPm/cNQbzsdx236wfaB715OQG54I4 GJOjNlrq3yYA2qxThxPA0AcjpD X-Received: by 2002:a05:6102:5cc1:b0:733:844f:3582 with SMTP id ada2fe7eead31-744e03b1d42mr5006573137.27.1783625837337; Thu, 09 Jul 2026 12:37:17 -0700 (PDT) X-Received: by 2002:a05:6102:5cc1:b0:733:844f:3582 with SMTP id ada2fe7eead31-744e03b1d42mr5006550137.27.1783625836820; Thu, 09 Jul 2026 12:37:16 -0700 (PDT) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b01caa635dsm46400e87.62.2026.07.09.12.37.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jul 2026 12:37:15 -0700 (PDT) From: Dmitry Baryshkov Date: Thu, 09 Jul 2026 22:37:04 +0300 Subject: [PATCH 7/9] media: iris: add MPEG2 decode support on Gen1 firmware 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: 7bit Message-Id: <20260709-iris-vp8-v1-7-6af3ab578a7c@oss.qualcomm.com> References: <20260709-iris-vp8-v1-0-6af3ab578a7c@oss.qualcomm.com> In-Reply-To: <20260709-iris-vp8-v1-0-6af3ab578a7c@oss.qualcomm.com> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=9434; i=dmitry.baryshkov@oss.qualcomm.com; h=from:subject:message-id; bh=ApbC40tJ27UQispiaWx7l8/PqpwgidGsxfrbIX5Rw3A=; b=owEBbQGS/pANAwAKAYs8ij4CKSjVAcsmYgBqT/hdB4+1QVbCBdM1XGAz/KEJ7GAjGZwy7IFKr ayNo5rzce+JATMEAAEKAB0WIQRMcISVXLJjVvC4lX+LPIo+Aiko1QUCak/4XQAKCRCLPIo+Aiko 1U8eB/464hcGitk89F/xcBgFcrKW21KFndHRZUkh4n/3orjOw3OLza2K5PIoTRXhi0NXktuOcF4 8iNramYgU+p13iPmbZrxCf+PsUjtL98Qmi/oEKdOV7CsGv30uFOQaPHs+5/nGGaTzIsze9RVhTy mpXcsSbXj0RR2NgukMuy6cgEQKMkRkAgsdCFcF5CqRPYO6rJe5pEDWRyUivoTKSsXEPqf2DXaTc lVpD0rKO+U+DkmBJ63ITOI+IVJiCzswfaLedTOQiVUa4TzH65J88PZhjlGTgcAc4tHftrLOm0mw YMJ8g6mTgL5cmrA+hbA3qoikASQT0fpEz3ccnha1fompnx7T X-Developer-Key: i=dmitry.baryshkov@oss.qualcomm.com; a=openpgp; fpr=8F88381DD5C873E4AE487DA5199BF1243632046A X-Proofpoint-GUID: L6mnXZS5S0mQ8HNSsreOTCoBzqMdlUlx X-Proofpoint-ORIG-GUID: L6mnXZS5S0mQ8HNSsreOTCoBzqMdlUlx X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA5MDE5MyBTYWx0ZWRfXxJaz6G91ZxtY dfvAP5b2ISchH3OHyxWiAwJo88Wv60fyzx67iGperVDmojtL5zQ4HaZN3FNl100jLtE8t9Y0r3O P4tH1dOqMriyYyO8MU2xvMb2Sj5OEGY= X-Authority-Analysis: v=2.4 cv=daKwG3Xe c=1 sm=1 tr=0 ts=6a4ff86e cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=lOmhsS4CxkcBO-nfWVgA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA5MDE5MyBTYWx0ZWRfX1QvTnBl8m2/r qrju7DI5VCclwE2aUUBGmjxqur22aZWIPdE487wNwQTf2zs59LdoUypXmnsX2FrZpx2VB/mLN6Y Am06cxIG44rrsRHfAsURfVqAGt1NUCGXm5Lh2hdjaGE37uyHEa0aXks3LhK3zv5HCJNoTypDTT/ aSNFjhF6iluR2Kxsgx5YkhSsFV7wDChh6SQJi8bb/SVz9hW9vESEOKVuX3V7Dr9pz/A/ny0oNh3 aWwt1ECrCHNDBTiBteYjuYijUdxtRo4Hycam1V/xwJ6orGPO/sC9UajqsXyg1vNdMu6GG7VIvNi amrSnpIGIPlamXxRJUcGOiFk9moolc+aAQSQ6DviYlpqxq12ZFlJYKBh7XEKVA31GfVE481uqIE Oof63WEzi3qh4Fjio3iOjYZYdryUuhMVcPX2Ve5wB0XrbRzyd2IMjzoedeUSdhrt9QgFlqfSF2T sTJ3vdExCOI1KMt/1eg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-07-09_04,2026-07-09_04,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 phishscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 clxscore=1015 malwarescore=0 priorityscore=1501 bulkscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607090193 The Gen1 firmware supports decoding MPEG2, but the iris driver never advertised or wired up the codec. Add the MPEG2 HFI codec code, map V4L2_PIX_FMT_MPEG2 to it in the Gen1 session open path, and compute the MPEG2 internal buffer sizes (line buffer and the quantisation-matrix / QP-dump persist buffer). Advertise the codec through the new Gen1 decode format list and register the MPEG2 profile and level menu controls so userspace can query them. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Dmitry Baryshkov --- drivers/media/platform/qcom/iris/iris_ctrls.c | 15 ++++++++++++++ drivers/media/platform/qcom/iris/iris_hfi_gen1.c | 24 ++++++++++++++++++++++ .../platform/qcom/iris/iris_hfi_gen1_command.c | 3 +++ .../platform/qcom/iris/iris_hfi_gen1_defines.h | 1 + .../platform/qcom/iris/iris_platform_common.h | 2 ++ drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 9 +++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 3 +++ 7 files changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c index 1bd6460a1b0a..8f9347c1df2b 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -30,12 +30,16 @@ static enum platform_inst_fw_cap_type iris_get_cap_id(u32 id) return PROFILE_VP9; case V4L2_CID_MPEG_VIDEO_VP8_PROFILE: return PROFILE_VP8; + case V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE: + return PROFILE_MPEG2; case V4L2_CID_MPEG_VIDEO_H264_LEVEL: return LEVEL_H264; case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL: return LEVEL_HEVC; case V4L2_CID_MPEG_VIDEO_VP9_LEVEL: return LEVEL_VP9; + case V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL: + return LEVEL_MPEG2; case V4L2_CID_MPEG_VIDEO_HEVC_TIER: return TIER; case V4L2_CID_MPEG_VIDEO_HEADER_MODE: @@ -175,12 +179,16 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_type cap_id) return V4L2_CID_MPEG_VIDEO_VP9_PROFILE; case PROFILE_VP8: return V4L2_CID_MPEG_VIDEO_VP8_PROFILE; + case PROFILE_MPEG2: + return V4L2_CID_MPEG_VIDEO_MPEG2_PROFILE; case LEVEL_H264: return V4L2_CID_MPEG_VIDEO_H264_LEVEL; case LEVEL_HEVC: return V4L2_CID_MPEG_VIDEO_HEVC_LEVEL; case LEVEL_VP9: return V4L2_CID_MPEG_VIDEO_VP9_LEVEL; + case LEVEL_MPEG2: + return V4L2_CID_MPEG_VIDEO_MPEG2_LEVEL; case TIER: return V4L2_CID_MPEG_VIDEO_HEVC_TIER; case HEADER_MODE: @@ -527,6 +535,7 @@ int iris_set_stage(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id * content also uses a single stage. */ if (inst->is_interlaced || + inst->codec == V4L2_PIX_FMT_MPEG2 || iris_res_is_less_than(width, height, 1280, 720)) work_mode = STAGE_1; } @@ -565,6 +574,9 @@ int iris_set_profile(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_ } else if (inst->codec == V4L2_PIX_FMT_VP8) { hfi_id = inst->fw_caps[PROFILE_VP8].hfi_id; hfi_value = inst->fw_caps[PROFILE_VP8].value; + } else if (inst->codec == V4L2_PIX_FMT_MPEG2) { + hfi_id = inst->fw_caps[PROFILE_MPEG2].hfi_id; + hfi_value = inst->fw_caps[PROFILE_MPEG2].value; } else { hfi_id = inst->fw_caps[PROFILE_HEVC].hfi_id; hfi_value = inst->fw_caps[PROFILE_HEVC].value; @@ -585,6 +597,9 @@ int iris_set_level(struct iris_inst *inst, enum platform_inst_fw_cap_type cap_id if (inst->codec == V4L2_PIX_FMT_H264) { hfi_id = inst->fw_caps[LEVEL_H264].hfi_id; hfi_value = inst->fw_caps[LEVEL_H264].value; + } else if (inst->codec == V4L2_PIX_FMT_MPEG2) { + hfi_id = inst->fw_caps[LEVEL_MPEG2].hfi_id; + hfi_value = inst->fw_caps[LEVEL_MPEG2].value; } else { hfi_id = inst->fw_caps[LEVEL_HEVC].hfi_id; hfi_value = inst->fw_caps[LEVEL_HEVC].value; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c index 4c3aa5a03ddd..4b05c2a47b0b 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1.c @@ -41,6 +41,29 @@ static const struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = { .value = V4L2_MPEG_VIDEO_VP8_PROFILE_0, .flags = CAP_FLAG_MENU, }, + { + .cap_id = PROFILE_MPEG2, + .min = V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE, + .max = V4L2_MPEG_VIDEO_MPEG2_PROFILE_HIGH, + .step_or_mask = BIT(V4L2_MPEG_VIDEO_MPEG2_PROFILE_SIMPLE) | + BIT(V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN) | + BIT(V4L2_MPEG_VIDEO_MPEG2_PROFILE_SNR_SCALABLE) | + BIT(V4L2_MPEG_VIDEO_MPEG2_PROFILE_SPATIALLY_SCALABLE) | + BIT(V4L2_MPEG_VIDEO_MPEG2_PROFILE_HIGH), + .value = V4L2_MPEG_VIDEO_MPEG2_PROFILE_MAIN, + .flags = CAP_FLAG_MENU, + }, + { + .cap_id = LEVEL_MPEG2, + .min = V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW, + .max = V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH, + .step_or_mask = BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_LOW) | + BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN) | + BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH_1440) | + BIT(V4L2_MPEG_VIDEO_MPEG2_LEVEL_HIGH), + .value = V4L2_MPEG_VIDEO_MPEG2_LEVEL_MAIN, + .flags = CAP_FLAG_MENU, + }, }; static const struct platform_inst_fw_cap inst_fw_cap_sm8250_enc[] = { @@ -435,6 +458,7 @@ static const u32 iris_hfi_gen1_dec_fmts[] = { V4L2_PIX_FMT_HEVC, V4L2_PIX_FMT_VP9, V4L2_PIX_FMT_VP8, + V4L2_PIX_FMT_MPEG2, }; static const u32 iris_hfi_gen1_ar50lt_dec_fmts[] = { diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 90645ed3e0d8..53ba48f88410 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -111,6 +111,9 @@ static int iris_hfi_gen1_session_open(struct iris_inst *inst) case V4L2_PIX_FMT_VP9: codec = HFI_VIDEO_CODEC_VP9; break; + case V4L2_PIX_FMT_MPEG2: + codec = HFI_VIDEO_CODEC_MPEG2; + break; } packet.shdr.hdr.size = sizeof(struct hfi_session_open_pkt); diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h index 13c8ff59d6e4..3c8ae1c82540 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h @@ -14,6 +14,7 @@ #define HFI_SESSION_TYPE_DEC 2 #define HFI_VIDEO_CODEC_H264 0x00000002 +#define HFI_VIDEO_CODEC_MPEG2 0x00000010 #define HFI_VIDEO_CODEC_VP8 0x00001000 #define HFI_VIDEO_CODEC_HEVC 0x00002000 #define HFI_VIDEO_CODEC_VP9 0x00004000 diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h index 84017b66e98f..3d631effe307 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -116,9 +116,11 @@ enum platform_inst_fw_cap_type { PROFILE_HEVC, PROFILE_VP9, PROFILE_VP8, + PROFILE_MPEG2, LEVEL_H264, LEVEL_HEVC, LEVEL_VP9, + LEVEL_MPEG2, PROFILE_AV1, LEVEL_AV1, TIER_AV1, diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c index ca90414e6c19..c16e2b652cf4 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.c @@ -298,6 +298,11 @@ static u32 hfi_buffer_persist_vp8d(void) return ALIGN(VP8_NUM_PROBABILITY_TABLE_BUF * VP8_PROB_TABLE_SIZE, DMA_ALIGNMENT); } +static u32 hfi_buffer_persist_mpeg2d(void) +{ + return QMATRIX_SIZE + MP2D_QPDUMP_SIZE; +} + static u32 hfi_buffer_persist_vp9d_ar50lt(void) { return ALIGN(VP9_NUM_PROBABILITY_TABLE_BUF * VP9_PROB_TABLE_SIZE, DMA_ALIGNMENT) + @@ -1083,6 +1088,8 @@ static u32 iris_vpu_dec_persist_size(struct iris_inst *inst) return hfi_buffer_persist_vp9d(); else if (inst->codec == V4L2_PIX_FMT_VP8) return hfi_buffer_persist_vp8d(); + else if (inst->codec == V4L2_PIX_FMT_MPEG2) + return hfi_buffer_persist_mpeg2d(); else if (inst->codec == V4L2_PIX_FMT_AV1) { caps = inst->core->iris_platform_data->inst_caps; if (inst->fw_caps[DRAP].value) @@ -1163,7 +1170,7 @@ static u32 iris_vpu_dec_line_size(struct iris_inst *inst) else if (inst->codec == V4L2_PIX_FMT_VP9) return hfi_buffer_line_vp9d(width, height, out_min_count, is_opb, num_vpp_pipes); - else if (inst->codec == V4L2_PIX_FMT_VP8) + else if (inst->codec == V4L2_PIX_FMT_VP8 || inst->codec == V4L2_PIX_FMT_MPEG2) return hfi_buffer_line_vp8d(width, height, is_opb, num_vpp_pipes); else if (inst->codec == V4L2_PIX_FMT_AV1) return hfi_buffer_line_av1d(width, height, is_opb, num_vpp_pipes); diff --git a/drivers/media/platform/qcom/iris/iris_vpu_buffer.h b/drivers/media/platform/qcom/iris/iris_vpu_buffer.h index 684b459c0cad..4694467677f6 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_buffer.h +++ b/drivers/media/platform/qcom/iris/iris_vpu_buffer.h @@ -69,6 +69,9 @@ struct iris_inst; #define VP8_NUM_PROBABILITY_TABLE_BUF (5 + 1) #define VP8_PROB_TABLE_SIZE (3840) +#define QMATRIX_SIZE (sizeof(u32) * 128 + 256) +#define MP2D_QPDUMP_SIZE (115200) + #define SIZE_SEI_USERDATA 4096 #define SIZE_DOLBY_RPU_METADATA (41 * 1024) #define H264_CABAC_HDR_RATIO_HD_TOT 1 -- 2.47.3