From nobody Fri Dec 19 07:17:39 2025 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 EC5E62F5488 for ; Wed, 8 Oct 2025 09:52:47 +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=1759917169; cv=none; b=i/8TWY4OrGdk3LRUDn6uxlzaa9cjSXkxaFQ+baUBxj26WwEsoz8CvHlokEZ8dr67MuFXobcBvrNxBToV2Hplp9yaATvq70tWeV7HGSWCE+yB0FRoot2fBMoGPTbVZcwt80trfDkkbCPfKgqGLtwYLuJfAZK5ehGZ+8iIH+U/M6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759917169; c=relaxed/simple; bh=/foPdUmYkCD5o7LTrZYcScg/twI3NzFBkPoZALJPLE4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=r9LlenGjqlDAVWgGHCw9tD046hQ2yI9FGQAdu11DC1EgHIVYH5kOOW1koIPxwiOJvvFk4LjmrdQ6WnhD8XkY2XlyjzZVAR5NyLWcD9za290lxVJx90aPoK0zsGC0Wm12sZj/Ztb2VuFu8FkdQZv7AFVuqFYuByWyQuxxfqmcnPY= 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=DZOydyxn; 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="DZOydyxn" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59890PU2015824 for ; Wed, 8 Oct 2025 09:52:47 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= UiUsw8kswXXj782+mjWWFj8hIBNpbwvCHeP8wMn0TQw=; b=DZOydyxnhrp26igS I5N3E6kG5Zs8n1jkK79ncwOEs+H3BAoas5pkDfKCbARFUH3tlOJNaRPqW6D5VBA8 tyKZKeY9EVR/56cAq0OD79LbbGYhNagCH2AYaexga9dUDBe8ui+GIyMGdOTltcS6 GLdBNv04kp5h5AmP1D93olHhmfUdNSlP8qtwzGhAisH1kcbtkHbSpC3UZsVaenIK 5lIswvhQi81qosX6EDF2wuT9REnfKiPbCkUdL3OjeeT4rdTDlwrogFi38Vel6AWd e3voIs2Pgs+5LsGC4S8fpyP6cDMYdGhdr5wDPDbspf4y7Qd9nl6CIpnH9VbzqXRu /0bp0w== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 49jtk721tv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 08 Oct 2025 09:52:46 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-32eae48beaaso7270798a91.0 for ; Wed, 08 Oct 2025 02:52:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759917165; x=1760521965; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UiUsw8kswXXj782+mjWWFj8hIBNpbwvCHeP8wMn0TQw=; b=VErevSMHDH0dUzQU4TeIM29gPf9v1KqZ2KI4wQMSV3kxsH1rbiJF/w21DYmH/3X9hH GP/cQ8B/YPRDMlVNlSCUWgX8Ku7PHdqnithI3Whmeqx2OgqNpiOVXVKVa0IxEFqusk11 RJGOTnFnVrk4gnPdHNGFHGgNF14mg6mT2ptm0BaE6mJjEjoSoUKuN8NxmaQaQpJeM1N2 1P0KOWEkQ46UXsSKPYNy3zG/NxLSfSsvqRgbGfrV+90CQutHAbW5M+HbhUuSr6qTuhEa glo8cRP/2zgYWe3RqM/lbFJ3z11ewkEsNkPVuFfdfDcOVlPpyiL3VXoVGCJzlt7GypRb qWdA== X-Forwarded-Encrypted: i=1; AJvYcCXc4BucXlQtFcwYW5mCpzeWKltmcxcU0WCtIHJEbgB6XPILV6fwgQKLxAzRGwoFGRr6CkSEYtH+cGtEZos=@vger.kernel.org X-Gm-Message-State: AOJu0YxD+3s6Sah/7PBlE9BI5SpibhIjkN1hHlk+nYHsfLpB0wwRq0R8 Os3ZQ8qCEWg/4dYVKBq9d1J20U+WtMdI+j3/BrMRCubpsiMFJihH/ORBJyYj8BV4rGS0W2EXA4o abS5xtJjCSF2Ae9603n3SaZS+yKFIEZ7UrLE+hOJjKaBtObJQjfJsSg1eRZxh2f4cyA4= X-Gm-Gg: ASbGnctusm40LqgKHaV9UqJ3mjMVk3B7DdhN64O0KlDqFmNnntZH9DaXN7HOmKlQCZU 3tYm7sY6M2VXrkjfskep/MmxcNyIEJlSk3FOM4+71wQL/Fm/6cF8aSRTk/PWMG0t1xT70K7BmwZ jtfSly2cxGlaIWLg+OMvMInL4jnoo4D7wH8yVlEbtDqnrCYYUfOuokn8EQ8rp8X46RgmL+IQIyS T+KYFhn8j6S6nQwxpooATfwjXYC7lKmriUeviV1p3gjOEcoqvbP7lqidgqgGUdLJ8F+XCMl9WGN Euj+EGvtNVOxPsjS1UJIbaPV1Fsz8oqJUErhFzsdPURpDtHRHNuC9rwQzPbN9z0/eaaPn+v0vPr amjTR0+E= X-Received: by 2002:a17:90b:3b49:b0:330:a301:35f4 with SMTP id 98e67ed59e1d1-33b513b4b46mr3634366a91.20.1759917165206; Wed, 08 Oct 2025 02:52:45 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFDkZiuVALb3JY9IwQZvFpIvu05yS6gQDLWHeZjVZIIAAlxR+BHHBzEIakEZwXsV8LzngwOoA== X-Received: by 2002:a17:90b:3b49:b0:330:a301:35f4 with SMTP id 98e67ed59e1d1-33b513b4b46mr3634316a91.20.1759917164635; Wed, 08 Oct 2025 02:52:44 -0700 (PDT) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-33b510e91d4sm2763833a91.1.2025.10.08.02.52.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Oct 2025 02:52:44 -0700 (PDT) From: Dikshita Agarwal Date: Wed, 08 Oct 2025 15:22:25 +0530 Subject: [PATCH v2 1/3] media: iris: Add support for HFI_PROP_OPB_ENABLE to control split mode 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: <20251008-video-iris-ubwc-enable-v2-1-478ba2d96427@oss.qualcomm.com> References: <20251008-video-iris-ubwc-enable-v2-0-478ba2d96427@oss.qualcomm.com> In-Reply-To: <20251008-video-iris-ubwc-enable-v2-0-478ba2d96427@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dmitry Baryshkov , Dikshita Agarwal X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1759917158; l=3631; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=/foPdUmYkCD5o7LTrZYcScg/twI3NzFBkPoZALJPLE4=; b=6R30Ub4cU8Er6A9TkcMiuYOip8sv4B9PzkzLAXwOmq1A3ETalgc2nRIRE9yW0Mt11lC8LClOl wekZqqH8h31BFYv8bg3C84s3B87B4BaZJDKKRcX+l9yK1q2kV2HgD6y X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDA0MDAxNyBTYWx0ZWRfXz7On+wi79JIb zTNR9v6Lt0cRBcjXOIs8lJ+gf1YccIj7D1jv4f1czVwKULC6FlXYQiws90M0HCuwaW1osBQFVrZ IrH9rVACxP/3KPBj4hAxlOKy+2j8AjIw1yOzzaPgm/4UrmUOKCnZ/q57pQbmMGxDUdu3jF3NSB+ 7aH/pVjskdfsrCGv/bsiGr0jW7ZoVIM/WIjlVWVZguRYcVmSqiyLOozwOQTyHz0uEDHgptjwy3g Ayn2+J2fVyhsyknnA+Exd6tls7u68raaxUuFyxKrNo3YKgetjuW/aqNz2wXr5speYNdlTBr9K+H w2oIcsg8PssdZgTwAo619gNYAjtqOR5AdhznSVZJtBUhpxVSC8HtCkty7DItdNXnIo4pjQUflyu j1DXJT1GZaFflQRKL98xocK+e111gg== X-Authority-Analysis: v=2.4 cv=do3Wylg4 c=1 sm=1 tr=0 ts=68e6346e cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=x6icFKpwvdMA:10 a=EUspDBNiAAAA:8 a=TniuDiUtN4nd1O1swfgA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-GUID: eNHiwnYtVrDU0EpTgm2jC76cK9mLjFr9 X-Proofpoint-ORIG-GUID: eNHiwnYtVrDU0EpTgm2jC76cK9mLjFr9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-10-08_03,2025-10-06_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 adultscore=0 lowpriorityscore=0 phishscore=0 clxscore=1015 malwarescore=0 spamscore=0 impostorscore=0 priorityscore=1501 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2509150000 definitions=main-2510040017 Add handling for the HFI_PROP_OPB_ENABLE property, which allows enabling or disabling split mode in the firmware. When HFI_PROP_OPB_ENABLE is set to true, the firmware activates split mode for output picture buffers (OPB). The OPB format is determined by the HFI_PROP_COLOR_FORMAT property, supporting NV12 or QC08C formats. Signed-off-by: Dikshita Agarwal Reviewed-by: Vikash Garodia --- drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c | 15 ++++++++++++= +++ drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h | 1 + drivers/media/platform/qcom/iris/iris_platform_gen2.c | 1 + 3 files changed, 17 insertions(+) diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_command.c index 4ce71a14250832440099e4cf3835b4aedfb749e8..56ced61de924eff3388c7df096f= 8235136bf473d 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c @@ -422,6 +422,20 @@ static int iris_hfi_gen2_set_level(struct iris_inst *i= nst, u32 plane) sizeof(u32)); } =20 +static int iris_hfi_gen2_set_opb_enable(struct iris_inst *inst, u32 plane) +{ + u32 port =3D iris_hfi_gen2_get_port(inst, plane); + u32 opb_enable =3D iris_split_mode_enabled(inst); + + return iris_hfi_gen2_session_set_property(inst, + HFI_PROP_OPB_ENABLE, + HFI_HOST_FLAGS_NONE, + port, + HFI_PAYLOAD_U32, + &opb_enable, + sizeof(u32)); +} + static int iris_hfi_gen2_set_colorformat(struct iris_inst *inst, u32 plane) { u32 port =3D iris_hfi_gen2_get_port(inst, plane); @@ -527,6 +541,7 @@ static int iris_hfi_gen2_session_set_config_params(stru= ct iris_inst *inst, u32 p {HFI_PROP_SIGNAL_COLOR_INFO, iris_hfi_gen2_set_colorspace = }, {HFI_PROP_PROFILE, iris_hfi_gen2_set_profile = }, {HFI_PROP_LEVEL, iris_hfi_gen2_set_level = }, + {HFI_PROP_OPB_ENABLE, iris_hfi_gen2_set_opb_enable = }, {HFI_PROP_COLOR_FORMAT, iris_hfi_gen2_set_colorformat = }, {HFI_PROP_LINEAR_STRIDE_SCANLINE, iris_hfi_gen2_set_linear_stride_sc= anline }, {HFI_PROP_TIER, iris_hfi_gen2_set_tier = }, 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 aa1f795f5626c1f76a32dd650302633877ce67be..1b6a4dbac828ffea53c1be0d362= 4a033c283c972 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_defines.h @@ -91,6 +91,7 @@ enum hfi_seq_header_mode { #define HFI_PROP_BUFFER_MARK 0x0300016c #define HFI_PROP_RAW_RESOLUTION 0x03000178 #define HFI_PROP_TOTAL_PEAK_BITRATE 0x0300017C +#define HFI_PROP_OPB_ENABLE 0x03000184 #define HFI_PROP_COMV_BUFFER_COUNT 0x03000193 #define HFI_PROP_END 0x03FFFFFF =20 diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index 36d69cc73986b74534a2912524c8553970fd862e..69c952c68e939f305f25511e2e4= 763487ec8e0de 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -691,6 +691,7 @@ static const u32 sm8550_venc_input_config_params[] =3D { }; =20 static const u32 sm8550_vdec_output_config_params[] =3D { + HFI_PROP_OPB_ENABLE, HFI_PROP_COLOR_FORMAT, HFI_PROP_LINEAR_STRIDE_SCANLINE, }; --=20 2.34.1 From nobody Fri Dec 19 07:17:39 2025 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 DFFB82F5A20 for ; Wed, 8 Oct 2025 09:52:50 +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=1759917173; cv=none; b=SB9rI1YoM+X81gZKkUfT6vqj9Fy/yxkCQOS/AqX8e5wJzqLfhfWNcs9JCt6VlB2q/B3LjUZnNmX0f97WgbD8gj01zidrrD38TmONepN9GxYCbiKmHHf2Dc2I4CD2qpkqCi+BUcFIoCR6r/pAxpATuVAiKv5Q30yNGV38zbdR4hc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759917173; c=relaxed/simple; bh=W1z8dmd1zOKmRAB45rBCsy2K3g/McfdDaZiFHL25crI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bPW0rHje0zCFeLfup5MO/YNE4eLBkHAKLDOMnjgueNXF5c1zxFKk4XmHEDxeFFXMVWLwaq8oTCbOyu0a2i+4lsasT6SLVWkSdltO1ZGPSW2+i4uzy8f4tV0n7QeSUg0x+VZW1V98I0yRgmh/DVkibqGd1OAhbs8jtzHMhNmWBnM= 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=V7L+cCo8; 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="V7L+cCo8" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59890OsC009332 for ; Wed, 8 Oct 2025 09:52:49 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= PS+fbM6Xqqglpg+9rAO7OJS9ghN31fp4ByCJ49cYoLU=; b=V7L+cCo8L1kZPnbZ cLnrZ0Ve77phwg42inO3Gsq9du5uRT8LTgla62Mg8tFVY5rWlazrd/Hld9825IUY Ju8Y/LWx+57UeDiJ465Dh2HZo6ekqjhao4H0q8jRK8HtDgJM1zqdsHl6lOBgGawY 6+D3CEXuTWpSz7ZfDPoN54uzDs2JNJQTP14+KJgbi5K01/2lqE/TFg00Cvwh/cnV yixlDVqZdd3IvARgZjW2ZG0spt1rffV8dHvxhJCedhMr+kzfIpMPoExsKpyCaxBV L+/vDvjn5h/OmYEJjNr2JPjHagF1hDym+AIuc/dkJTr6te981zlROnLYRqgDrgZv Ik7brg== Received: from mail-pj1-f71.google.com (mail-pj1-f71.google.com [209.85.216.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 49junua18b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 08 Oct 2025 09:52:49 +0000 (GMT) Received: by mail-pj1-f71.google.com with SMTP id 98e67ed59e1d1-32eddb7e714so6144433a91.1 for ; Wed, 08 Oct 2025 02:52:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759917168; x=1760521968; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PS+fbM6Xqqglpg+9rAO7OJS9ghN31fp4ByCJ49cYoLU=; b=GjOWjIEbN/ODldOFGj/zmUhymGSKq3BPqvHfvuz/Kt0wq+vJlMaPCElplG7f79Q6qw oBYqCtlhi6dHKsSX53Ovj6iTahT+o1F0jOg07mY9vDfxze6WhIbNlu70FeorH15y/uCC +1Oxhr9ytOLn82d0ly9hRKMRVvMshHQ6f1XiLDrBF0TKzTm3jZ/P+GuLcmdQ7W2cSVkC UndjNRkO16n1eghrraDqpMa9gWbh1FDjOfWFJKRbFJoOH5452PpEP/cdTNv5XvBGjWcr 2afMW7bgE5fF9hXg1AVzThfBYsGFZlQk7iGkWc7K3lV9Wzj4P3eLN2ujT425jYWjhPuh 4Pqg== X-Forwarded-Encrypted: i=1; AJvYcCWYEhvNzLGzN4MXagvW3W7+JuNluumdcnzbPfo8e2EwEQpVXr6o+HGP3MTOe3DC+4qqY6kpI05MuyaMu0E=@vger.kernel.org X-Gm-Message-State: AOJu0Yz4kEfoc8sqvWWWgybwm/pQHXFvkH08CEk9FPD1Vnry5rfzQi/m Z6ZygBz2MUfN3/uzV4n+v7JmLxFrFBT1BOdLoQ4r0Bo+6X/sTYOTOMZAARIbi/mwyiBeQzZOLJm sQu/tsvwckURjdugGlJscB7qJXPxsjVeDSocNSURZ/lEZGjv5vz2yxzP2OxiDUVETx60= X-Gm-Gg: ASbGncv7SEtsLquz1QqhxN+6jOazsDtyuO9xnuHwRJFhGxodnTznseL9R7eykFxdEqZ MXxPIiADGJJepiWi+w6at1u+zv1R4QjlzEMuocqizeOuhO1KQ3MUnjiMBvme7B80ze37KJIW2fR UM7HA2W2hWTCUacdYIkVQPsaU9jqUpUc+Ry1zw8vX0OaQD2vbPQ+IMtv6avef+BruMTbPL1AQlL O/aGXGgUUnxEtUttYM47cPll/JZJO7N0ITqab8fOOcVxcPA/kzKl27SvRqkSgOSKj+ZY9yyHVVo o58D8ieKlUq/me72A4rzfCsU4X7nppz4zthMkj3kWN8eaORvJiH+MPBeiXBKWJbe1QzI71Lyx7J 6wBz0PzM= X-Received: by 2002:a17:90b:3b4d:b0:329:f630:6c3 with SMTP id 98e67ed59e1d1-33b513757fcmr3882396a91.20.1759917168313; Wed, 08 Oct 2025 02:52:48 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHtFXLOASAwz6WPj42R/oo1fsa2LvdMmKLzHl2FAZVlJffubHQGs07trttPJ3wDEJJvddjqWw== X-Received: by 2002:a17:90b:3b4d:b0:329:f630:6c3 with SMTP id 98e67ed59e1d1-33b513757fcmr3882359a91.20.1759917167728; Wed, 08 Oct 2025 02:52:47 -0700 (PDT) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-33b510e91d4sm2763833a91.1.2025.10.08.02.52.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Oct 2025 02:52:47 -0700 (PDT) From: Dikshita Agarwal Date: Wed, 08 Oct 2025 15:22:26 +0530 Subject: [PATCH v2 2/3] media: iris: Add support for QC08C format for decoder 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: <20251008-video-iris-ubwc-enable-v2-2-478ba2d96427@oss.qualcomm.com> References: <20251008-video-iris-ubwc-enable-v2-0-478ba2d96427@oss.qualcomm.com> In-Reply-To: <20251008-video-iris-ubwc-enable-v2-0-478ba2d96427@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dmitry Baryshkov , Dikshita Agarwal X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1759917158; l=9913; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=W1z8dmd1zOKmRAB45rBCsy2K3g/McfdDaZiFHL25crI=; b=oFXIek9JfwGgLTn68u/voUP0dXHWxgg23vIFfdbxsAqf/jRETnSZNzvqZ4wpumh7dy2K1jPq4 CkJc//jSn+nDh3uvbzzfkXjTx3Q7DhLKpqj8B8i5dgW/OwU4dmq5t9i X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-ORIG-GUID: 5AE8zCRzzkaAjCfQKdZrlJkf4FgWg_1U X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDA0MDAyMyBTYWx0ZWRfX96ex2DHVm3hN eKN+vO9hQ5HrR18lt+utajNkun8qjzxry16GH1k6nr04orWlCEAJTE5bEyH6jdTFv1xxJpUhVTA sWblvBP24DBsctbOl2FSUl7B4+TTLIams9jfxG+QHzBoRrKif3LBqcfI0vSU7WaCeYgHSfJe7td wTnYyUOYGzbX6pi7IyiHddLCRb9PjwlbtSBW0CwcmUHypNaT2zP4NJBCnDRtgcUdh8F3n3uxuOY y7JLyk1oTWaM2gwqqPq5cIAZa7hFol/kjgRXw2asGqJWJcBblpKKmmUuLPG8gl2FHK4GbeTHuzN y7bY+ZYWMIw73qNciL5CzmXA8zEMMzcyCS7F1J6ZHyE+qyBIWdC3bsQtGAZlnWGQlS9Ug8fA/g5 d9O4Jin6k83pqFZTAo50OBK1uVFbKg== X-Authority-Analysis: v=2.4 cv=CbIFJbrl c=1 sm=1 tr=0 ts=68e63471 cx=c_pps a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=x6icFKpwvdMA:10 a=EUspDBNiAAAA:8 a=zeDBRBm57Unpba6ABZkA:9 a=QEXdDO2ut3YA:10 a=uKXjsCUrEbL0IQVhDsJ9:22 X-Proofpoint-GUID: 5AE8zCRzzkaAjCfQKdZrlJkf4FgWg_1U X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-10-08_03,2025-10-06_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 adultscore=0 suspectscore=0 spamscore=0 priorityscore=1501 phishscore=0 impostorscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2509150000 definitions=main-2510040023 Introduce handling for the QC08C format in the decoder. QC08C format is NV12 with UBWC compression. Update format checks and configuration to enable decoding of QC08C streams. Signed-off-by: Dikshita Agarwal Reviewed-by: Vikash Garodia --- drivers/media/platform/qcom/iris/iris_buffer.c | 5 +- .../platform/qcom/iris/iris_hfi_gen1_command.c | 12 +++-- .../platform/qcom/iris/iris_hfi_gen2_command.c | 3 +- drivers/media/platform/qcom/iris/iris_instance.h | 7 ++- drivers/media/platform/qcom/iris/iris_utils.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 61 ++++++++++++++++++= ---- 6 files changed, 72 insertions(+), 19 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media= /platform/qcom/iris/iris_buffer.c index c0900038e7defccf7de3cb60e17c71e36a0e8ead..83dcf49e57ec1473bc4edd26c48= ab0b247d23818 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -261,7 +261,10 @@ int iris_get_buffer_size(struct iris_inst *inst, case BUF_INPUT: return iris_dec_bitstream_buffer_size(inst); case BUF_OUTPUT: - return iris_yuv_buffer_size_nv12(inst); + if (inst->fmt_dst->fmt.pix_mp.pixelformat =3D=3D V4L2_PIX_FMT_QC08C) + return iris_yuv_buffer_size_qc08c(inst); + else + return iris_yuv_buffer_size_nv12(inst); case BUF_DPB: return iris_yuv_buffer_size_qc08c(inst); default: 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 e1788c266bb1080921f17248fd5ee60156b3143d..e458d3349ce09aadb75d056ae84= e3aab95f03078 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -774,20 +774,21 @@ static int iris_hfi_gen1_set_raw_format(struct iris_i= nst *inst, u32 plane) pixelformat =3D inst->fmt_dst->fmt.pix_mp.pixelformat; if (iris_split_mode_enabled(inst)) { fmt.buffer_type =3D HFI_BUFFER_OUTPUT; - fmt.format =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? - HFI_COLOR_FORMAT_NV12_UBWC : 0; + fmt.format =3D HFI_COLOR_FORMAT_NV12_UBWC; =20 ret =3D hfi_gen1_set_property(inst, ptype, &fmt, sizeof(fmt)); if (ret) return ret; =20 fmt.buffer_type =3D HFI_BUFFER_OUTPUT2; - fmt.format =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? HFI_COLOR_FORMAT_= NV12 : 0; + fmt.format =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? + HFI_COLOR_FORMAT_NV12 : HFI_COLOR_FORMAT_NV12_UBWC; =20 ret =3D hfi_gen1_set_property(inst, ptype, &fmt, sizeof(fmt)); } else { fmt.buffer_type =3D HFI_BUFFER_OUTPUT; - fmt.format =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? HFI_COLOR_FORMAT_= NV12 : 0; + fmt.format =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? + HFI_COLOR_FORMAT_NV12 : HFI_COLOR_FORMAT_NV12_UBWC; =20 ret =3D hfi_gen1_set_property(inst, ptype, &fmt, sizeof(fmt)); } @@ -806,6 +807,9 @@ static int iris_hfi_gen1_set_format_constraints(struct = iris_inst *inst, u32 plan const u32 ptype =3D HFI_PROPERTY_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAI= NTS_INFO; struct hfi_uncompressed_plane_actual_constraints_info pconstraint; =20 + if (inst->fmt_dst->fmt.pix_mp.pixelformat =3D=3D V4L2_PIX_FMT_QC08C) + return 0; + pconstraint.buffer_type =3D HFI_BUFFER_OUTPUT2; pconstraint.num_planes =3D 2; pconstraint.plane_format[0].stride_multiples =3D 128; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_command.c index 56ced61de924eff3388c7df096f8235136bf473d..5ad202d3fcdc57a2b7b43de1576= 3a686ce0f7bd7 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c @@ -443,7 +443,8 @@ static int iris_hfi_gen2_set_colorformat(struct iris_in= st *inst, u32 plane) =20 if (inst->domain =3D=3D DECODER) { pixelformat =3D inst->fmt_dst->fmt.pix_mp.pixelformat; - hfi_colorformat =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? HFI_COLOR_FMT= _NV12 : 0; + hfi_colorformat =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? + HFI_COLOR_FMT_NV12 : HFI_COLOR_FMT_NV12_UBWC; } else { pixelformat =3D inst->fmt_src->fmt.pix_mp.pixelformat; hfi_colorformat =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? HFI_COLOR_FMT= _NV12 : 0; diff --git a/drivers/media/platform/qcom/iris/iris_instance.h b/drivers/med= ia/platform/qcom/iris/iris_instance.h index 5982d7adefeab80905478b32cddba7bd4651a691..62fbb30691ff967212022308fa5= 3ff221fa24ce9 100644 --- a/drivers/media/platform/qcom/iris/iris_instance.h +++ b/drivers/media/platform/qcom/iris/iris_instance.h @@ -15,12 +15,17 @@ #define DEFAULT_WIDTH 320 #define DEFAULT_HEIGHT 240 =20 -enum iris_fmt_type { +enum iris_fmt_type_out { IRIS_FMT_H264, IRIS_FMT_HEVC, IRIS_FMT_VP9, }; =20 +enum iris_fmt_type_cap { + IRIS_FMT_NV12, + IRIS_FMT_QC08C, +}; + struct iris_fmt { u32 pixfmt; u32 type; diff --git a/drivers/media/platform/qcom/iris/iris_utils.c b/drivers/media/= platform/qcom/iris/iris_utils.c index 85c70a62b1fd2c409fc18b28f64771cb0097a7fd..e2f1131de43128254d821134377= 1e657e425541e 100644 --- a/drivers/media/platform/qcom/iris/iris_utils.c +++ b/drivers/media/platform/qcom/iris/iris_utils.c @@ -34,7 +34,8 @@ int iris_get_mbpf(struct iris_inst *inst) =20 bool iris_split_mode_enabled(struct iris_inst *inst) { - return inst->fmt_dst->fmt.pix_mp.pixelformat =3D=3D V4L2_PIX_FMT_NV12; + return inst->fmt_dst->fmt.pix_mp.pixelformat =3D=3D V4L2_PIX_FMT_NV12 || + inst->fmt_dst->fmt.pix_mp.pixelformat =3D=3D V4L2_PIX_FMT_QC08C; } =20 void iris_helper_buffers_done(struct iris_inst *inst, unsigned int type, diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c b/drivers/media/p= latform/qcom/iris/iris_vdec.c index ae13c3e1b426bfd81a7b46dc6c3ff5eb5c4860cb..96844325b24e25497f1d59750f3= 4c67177fdddc7 100644 --- a/drivers/media/platform/qcom/iris/iris_vdec.c +++ b/drivers/media/platform/qcom/iris/iris_vdec.c @@ -67,7 +67,7 @@ void iris_vdec_inst_deinit(struct iris_inst *inst) kfree(inst->fmt_src); } =20 -static const struct iris_fmt iris_vdec_formats[] =3D { +static const struct iris_fmt iris_vdec_formats_out[] =3D { [IRIS_FMT_H264] =3D { .pixfmt =3D V4L2_PIX_FMT_H264, .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, @@ -82,12 +82,35 @@ static const struct iris_fmt iris_vdec_formats[] =3D { }, }; =20 +static const struct iris_fmt iris_vdec_formats_cap[] =3D { + [IRIS_FMT_NV12] =3D { + .pixfmt =3D V4L2_PIX_FMT_NV12, + .type =3D V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, + }, + [IRIS_FMT_QC08C] =3D { + .pixfmt =3D V4L2_PIX_FMT_QC08C, + .type =3D V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, + }, +}; + static const struct iris_fmt * find_format(struct iris_inst *inst, u32 pixfmt, u32 type) { - unsigned int size =3D ARRAY_SIZE(iris_vdec_formats); - const struct iris_fmt *fmt =3D iris_vdec_formats; + const struct iris_fmt *fmt =3D NULL; + unsigned int size =3D 0; unsigned int i; + switch (type) { + case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: + fmt =3D iris_vdec_formats_out; + size =3D ARRAY_SIZE(iris_vdec_formats_out); + break; + case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: + fmt =3D iris_vdec_formats_cap; + size =3D ARRAY_SIZE(iris_vdec_formats_cap); + break; + default: + return NULL; + } =20 for (i =3D 0; i < size; i++) { if (fmt[i].pixfmt =3D=3D pixfmt) @@ -103,8 +126,21 @@ find_format(struct iris_inst *inst, u32 pixfmt, u32 ty= pe) static const struct iris_fmt * find_format_by_index(struct iris_inst *inst, u32 index, u32 type) { - const struct iris_fmt *fmt =3D iris_vdec_formats; - unsigned int size =3D ARRAY_SIZE(iris_vdec_formats); + const struct iris_fmt *fmt =3D NULL; + unsigned int size =3D 0; + + switch (type) { + case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: + fmt =3D iris_vdec_formats_out; + size =3D ARRAY_SIZE(iris_vdec_formats_out); + break; + case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: + fmt =3D iris_vdec_formats_cap; + size =3D ARRAY_SIZE(iris_vdec_formats_cap); + break; + default: + return NULL; + } =20 if (index >=3D size || fmt[index].type !=3D type) return NULL; @@ -126,9 +162,10 @@ int iris_vdec_enum_fmt(struct iris_inst *inst, struct = v4l2_fmtdesc *f) f->flags =3D V4L2_FMT_FLAG_COMPRESSED | V4L2_FMT_FLAG_DYN_RESOLUTION; break; case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: - if (f->index) + fmt =3D find_format_by_index(inst, f->index, f->type); + if (!fmt) return -EINVAL; - f->pixelformat =3D V4L2_PIX_FMT_NV12; + f->pixelformat =3D fmt->pixfmt; break; default: return -EINVAL; @@ -157,7 +194,7 @@ int iris_vdec_try_fmt(struct iris_inst *inst, struct v4= l2_format *f) } break; case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: - if (f->fmt.pix_mp.pixelformat !=3D V4L2_PIX_FMT_NV12) { + if (!fmt) { f_inst =3D inst->fmt_dst; f->fmt.pix_mp.pixelformat =3D f_inst->fmt.pix_mp.pixelformat; f->fmt.pix_mp.width =3D f_inst->fmt.pix_mp.width; @@ -238,10 +275,11 @@ int iris_vdec_s_fmt(struct iris_inst *inst, struct v4= l2_format *f) inst->crop.height =3D f->fmt.pix_mp.height; break; case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: + if (!(find_format(inst, f->fmt.pix_mp.pixelformat, f->type))) + return -EINVAL; + fmt =3D inst->fmt_dst; fmt->type =3D V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE; - if (fmt->fmt.pix_mp.pixelformat !=3D V4L2_PIX_FMT_NV12) - return -EINVAL; fmt->fmt.pix_mp.pixelformat =3D f->fmt.pix_mp.pixelformat; fmt->fmt.pix_mp.width =3D ALIGN(f->fmt.pix_mp.width, 128); fmt->fmt.pix_mp.height =3D ALIGN(f->fmt.pix_mp.height, 32); @@ -268,7 +306,8 @@ int iris_vdec_validate_format(struct iris_inst *inst, u= 32 pixelformat) { const struct iris_fmt *fmt =3D NULL; =20 - if (pixelformat !=3D V4L2_PIX_FMT_NV12) { + fmt =3D find_format(inst, pixelformat, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE= ); + if (!fmt) { fmt =3D find_format(inst, pixelformat, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE= ); if (!fmt) return -EINVAL; --=20 2.34.1 From nobody Fri Dec 19 07:17:39 2025 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 A31532F5A3F for ; Wed, 8 Oct 2025 09:52:53 +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=1759917176; cv=none; b=oNw5k9AT1BJF0YFQSxONTTTl87tgrFgF2K+sMfYCPtCdbNMP0mb7TQGgps8BEiMs7OhWD2BZ88PKXJE08lgmfJryU9HmffnqFeORqdNDCYtmbNP1QgeexAuZkw0mG9zj00Fqkfh1ZA2ZSrV0XLtdtyVw4vJ4b5ZSgrHIJtd1Uj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759917176; c=relaxed/simple; bh=4crLsFonyut2wgW58S0vp/isNf2mmaPxvNyLhS/l0/U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z8iMXg6U43HZf1sWndDjan6P1R+juTZAx+LYJcrtufUWsYTtiUarBs7LHUKJTrjk+TfZ/PZVRfvAnxjCKcQQYnBqx6YIjj0Cp0JsmrPJ47ijHCxSC0Qmd10xjA/zzudjlcusjnhSNv6F0O8m+SAA0xg56u36i8XDbF6/yIe5+y8= 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=IPi56KS6; 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="IPi56KS6" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59890i0d014448 for ; Wed, 8 Oct 2025 09:52:52 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= woeoJMe/1z7CNrO3GZzfk1Drc1RvJgCKVaPxjU5YsMQ=; b=IPi56KS6+DUcwj5P WkQHXDTN7xZHaccMvQlEjYka7hBBdoAmBqVozLlGLnD726FEBHl36iCFKha1fTey zfRis/Mk/7kVF2objj5SXAQ+AXYry7tB/BQSMPHI9QcuOe0xtLo+QqzM5476IPSN YbnPh6p1IZrOoeRoy3/TcSYvXWA+yh2G7Mn7c8fNteVrrmHsqjew61riY4L4VT2C YC0qhe4D/ElBKdDWW+mGMwFDTWHDpLFiX8epOxJnsKKpRw1izOeq3QS1NdVpe6K1 g6QahwVDyImChKe01+LtrZTZCXXh3/qMcBS4bN6kINpEUhOf2yc4SvP7/n/YzZCR pSfPYw== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 49mgd0nrbx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Wed, 08 Oct 2025 09:52:52 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-782063922ceso6643195b3a.0 for ; Wed, 08 Oct 2025 02:52:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759917171; x=1760521971; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=woeoJMe/1z7CNrO3GZzfk1Drc1RvJgCKVaPxjU5YsMQ=; b=WajXWTj4+BZiXKshZrA1KiYMvoF35pq6xN0GnaWgBHbHXwoMs4LkKIMH5LTamk5jRZ Ioevf53Ip67WrUH7Ps+TJxp3k/rCaEBRqun2t6dVa8eukabdk2SwwYrmLfk6LSAh+lo7 teg6ZMQEM7Yj5dtq6H77jdNtrp8U95aeYIMnBK4rttqdHi2/NLoO75dFSiXNlmeXsovr /VL3CCSu66ROV8EAYP3OdInj085Zd0DjYD8UdJ3iSvTV0zBrn3fuLyovTxLsjyXlewNL Y1zIdZ0+9FUYI8g53PymQ3NaSdzV842yuG82n2latblSPIYF/u2URLChfyg5x15zDKmm CuZg== X-Forwarded-Encrypted: i=1; AJvYcCXGHTnPxCh1WndbxigYfLKd0sjHOdyHFgSHo6cP67s/0I8vIUqLjbBaKc3YY5+A7+y9flGuCsOkvqrTI/o=@vger.kernel.org X-Gm-Message-State: AOJu0Ywg0SLvBVGecOjS4MkuzASTYaA1s9VZMiIzGNGljDO8qfL1B12p 2REGO51ezrWW3K7TQVZbVYG3o17zJpRNZEZrI+w+S4nxdo+eDR5prSVfiMYeAhTE2Vq6wMCCVTS c2mg4Pm+cE9C1udJtxrJJh15EwLdtz+5IFI/kOyfD9jw6GU03dVD8JeH0f0iUaGXTD8A= X-Gm-Gg: ASbGncuUdwpYqIe0y3wjjZ3R1+RMFBHfbMvj4YjfBv/75U09BW0W6a0UBSQ0eHEYVSG mK4zb3YmANu8PeB6QFc8H57DxSNJNeTto45s/Hm9lGbNlyrFAhvtOVOiGurxEXk493lPmd0iIHt IVENplUQ7zCEc3ZJlniLAPNhttLAxA4GNN44psQqMNob84f/xVqxcjG8Tsqt5WZpLwDy0wqAJDE 1bCk6KCV/pEWlH3nWEEyF7KZ8ZaWh/2dXAlNU/l4+o2t8ZjHgiHVic70gdXIo0LH5ac4hLdTskM KbL4U6bekznhbMvpYFfnyXvFSznjE5HPj/PNehfRbYqPucpI3a15oYXiafVV5ONJT+pnerIJ24a HG3afbEQ= X-Received: by 2002:a05:6a20:7289:b0:262:4378:9ddb with SMTP id adf61e73a8af0-32da812f18bmr3578157637.23.1759917171286; Wed, 08 Oct 2025 02:52:51 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG/44I0uT+26D6cLu1FzRBB50dFq/IUKTaufQJ6oI36O8X9mFJx3IoRILnyG6MgRiGlb8h13Q== X-Received: by 2002:a05:6a20:7289:b0:262:4378:9ddb with SMTP id adf61e73a8af0-32da812f18bmr3578127637.23.1759917170773; Wed, 08 Oct 2025 02:52:50 -0700 (PDT) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-33b510e91d4sm2763833a91.1.2025.10.08.02.52.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Oct 2025 02:52:50 -0700 (PDT) From: Dikshita Agarwal Date: Wed, 08 Oct 2025 15:22:27 +0530 Subject: [PATCH v2 3/3] media: iris: Add support for QC08C format 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: <20251008-video-iris-ubwc-enable-v2-3-478ba2d96427@oss.qualcomm.com> References: <20251008-video-iris-ubwc-enable-v2-0-478ba2d96427@oss.qualcomm.com> In-Reply-To: <20251008-video-iris-ubwc-enable-v2-0-478ba2d96427@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dmitry Baryshkov , Dikshita Agarwal X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1759917158; l=7531; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=4crLsFonyut2wgW58S0vp/isNf2mmaPxvNyLhS/l0/U=; b=jO2EjRHwgDlsNHpsnTcMH5XP3ZSlQZu/YT7hqtV8JhjJxGt3knUKIG6eZ4jf9WwYZcE6v4XbG n7PQ5bjYpP/CrQwspfvUU+n0Ul+IKuZRNYjS+/a4GvArq/GXC0Xp0Xs X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-GUID: uTkaUEUxibvYr4W7WCWDqchInqG8fcj1 X-Authority-Analysis: v=2.4 cv=T8aBjvKQ c=1 sm=1 tr=0 ts=68e63474 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=x6icFKpwvdMA:10 a=EUspDBNiAAAA:8 a=nS3McV74YSJk3wcLVjgA:9 a=QEXdDO2ut3YA:10 a=IoOABgeZipijB_acs4fv:22 X-Proofpoint-ORIG-GUID: uTkaUEUxibvYr4W7WCWDqchInqG8fcj1 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDA2MDEyMyBTYWx0ZWRfX7q4grDpZM076 8dirBaYZrSYZj9VYcC79P0IX5v0K29/Cbp8l+jrRgjGwr7rsi/ULCyLar2eG/QsRe9dqO3lCguW a2IbFrvblR/BIVdabxGclXSPuLwDa+s7oyFHplIyHePMe+6/0Trth/QkpjP0pe3P0tB/k4im1rz jp28w+7DvScDY+aUAEjk7bme/eyPZNb+TBQPjVvV7AC1aAwZl/B/XAuOSbpRxyWMJSJw5iE86P5 1Ia/D38HNRIQfroosFqMSQZHS4PboTH1KauLIVuJHHmXItZU3yAyncQhHJKQsNIigvWKKlSq5vE o39ihrvVH0H4pdtBggJPiHfkWnUXYGciBOfpSmVgT/pEij5fU7hadTEaZR3rpchUsIGsnXcuXCP 1RXQ4HPBFKp6ZzLXocL5oo0brO1fmQ== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-10-08_03,2025-10-06_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 adultscore=0 phishscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2509150000 definitions=main-2510060123 Introduce handling for the QC08C format in the encoder. QC08C format is NV12 with UBWC compression. Update format checks and configuration to enable encoding to QC08C streams. Signed-off-by: Dikshita Agarwal Reviewed-by: Vikash Garodia --- drivers/media/platform/qcom/iris/iris_buffer.c | 12 ++++- .../platform/qcom/iris/iris_hfi_gen1_command.c | 3 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 3 +- drivers/media/platform/qcom/iris/iris_venc.c | 59 ++++++++++++++++++= ---- 4 files changed, 63 insertions(+), 14 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media= /platform/qcom/iris/iris_buffer.c index 83dcf49e57ec1473bc4edd26c48ab0b247d23818..b89b1ee06cce151e7c04a809563= 80d154643c116 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -171,9 +171,14 @@ static u32 iris_yuv_buffer_size_nv12(struct iris_inst = *inst) static u32 iris_yuv_buffer_size_qc08c(struct iris_inst *inst) { u32 y_plane, uv_plane, y_stride, uv_stride; - struct v4l2_format *f =3D inst->fmt_dst; u32 uv_meta_stride, uv_meta_plane; u32 y_meta_stride, y_meta_plane; + struct v4l2_format *f =3D NULL; + + if (inst->domain =3D=3D DECODER) + f =3D inst->fmt_dst; + else + f =3D inst->fmt_src; =20 y_meta_stride =3D ALIGN(DIV_ROUND_UP(f->fmt.pix_mp.width, META_STRIDE_ALI= GNED >> 1), META_STRIDE_ALIGNED); @@ -273,7 +278,10 @@ int iris_get_buffer_size(struct iris_inst *inst, } else { switch (buffer_type) { case BUF_INPUT: - return iris_yuv_buffer_size_nv12(inst); + if (inst->fmt_src->fmt.pix_mp.pixelformat =3D=3D V4L2_PIX_FMT_QC08C) + return iris_yuv_buffer_size_qc08c(inst); + else + return iris_yuv_buffer_size_nv12(inst); case BUF_OUTPUT: return iris_enc_bitstream_buffer_size(inst); default: 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 e458d3349ce09aadb75d056ae84e3aab95f03078..52da7ef7bab08fb1cb2ac804ccc= 6e3c7f9677890 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -795,7 +795,8 @@ static int iris_hfi_gen1_set_raw_format(struct iris_ins= t *inst, u32 plane) } else { pixelformat =3D inst->fmt_src->fmt.pix_mp.pixelformat; fmt.buffer_type =3D HFI_BUFFER_INPUT; - fmt.format =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? HFI_COLOR_FORMAT_N= V12 : 0; + fmt.format =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? + HFI_COLOR_FORMAT_NV12 : HFI_COLOR_FORMAT_NV12_UBWC; ret =3D hfi_gen1_set_property(inst, ptype, &fmt, sizeof(fmt)); } =20 diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/dri= vers/media/platform/qcom/iris/iris_hfi_gen2_command.c index 5ad202d3fcdc57a2b7b43de15763a686ce0f7bd7..6a772db2ec33fb002d8884753a4= 1dc98b3a8439d 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c @@ -447,7 +447,8 @@ static int iris_hfi_gen2_set_colorformat(struct iris_in= st *inst, u32 plane) HFI_COLOR_FMT_NV12 : HFI_COLOR_FMT_NV12_UBWC; } else { pixelformat =3D inst->fmt_src->fmt.pix_mp.pixelformat; - hfi_colorformat =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? HFI_COLOR_FMT= _NV12 : 0; + hfi_colorformat =3D pixelformat =3D=3D V4L2_PIX_FMT_NV12 ? + HFI_COLOR_FMT_NV12 : HFI_COLOR_FMT_NV12_UBWC; } =20 return iris_hfi_gen2_session_set_property(inst, diff --git a/drivers/media/platform/qcom/iris/iris_venc.c b/drivers/media/p= latform/qcom/iris/iris_venc.c index 099bd5ed4ae0294725860305254c4cad1ec88d7e..95e3ceb22d8c3a46c1bf3eb87e7= c1cc5ccf3039f 100644 --- a/drivers/media/platform/qcom/iris/iris_venc.c +++ b/drivers/media/platform/qcom/iris/iris_venc.c @@ -80,7 +80,7 @@ void iris_venc_inst_deinit(struct iris_inst *inst) kfree(inst->fmt_src); } =20 -static const struct iris_fmt iris_venc_formats[] =3D { +static const struct iris_fmt iris_venc_formats_cap[] =3D { [IRIS_FMT_H264] =3D { .pixfmt =3D V4L2_PIX_FMT_H264, .type =3D V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, @@ -91,12 +91,35 @@ static const struct iris_fmt iris_venc_formats[] =3D { }, }; =20 +static const struct iris_fmt iris_venc_formats_out[] =3D { + [IRIS_FMT_NV12] =3D { + .pixfmt =3D V4L2_PIX_FMT_NV12, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, + [IRIS_FMT_QC08C] =3D { + .pixfmt =3D V4L2_PIX_FMT_QC08C, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, +}; + static const struct iris_fmt * find_format(struct iris_inst *inst, u32 pixfmt, u32 type) { - const struct iris_fmt *fmt =3D iris_venc_formats; - unsigned int size =3D ARRAY_SIZE(iris_venc_formats); + const struct iris_fmt *fmt =3D NULL; + unsigned int size =3D 0; unsigned int i; + switch (type) { + case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: + fmt =3D iris_venc_formats_out; + size =3D ARRAY_SIZE(iris_venc_formats_out); + break; + case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: + fmt =3D iris_venc_formats_cap; + size =3D ARRAY_SIZE(iris_venc_formats_cap); + break; + default: + return NULL; + } =20 for (i =3D 0; i < size; i++) { if (fmt[i].pixfmt =3D=3D pixfmt) @@ -112,8 +135,21 @@ find_format(struct iris_inst *inst, u32 pixfmt, u32 ty= pe) static const struct iris_fmt * find_format_by_index(struct iris_inst *inst, u32 index, u32 type) { - const struct iris_fmt *fmt =3D iris_venc_formats; - unsigned int size =3D ARRAY_SIZE(iris_venc_formats); + const struct iris_fmt *fmt =3D NULL; + unsigned int size =3D 0; + + switch (type) { + case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: + fmt =3D iris_venc_formats_out; + size =3D ARRAY_SIZE(iris_venc_formats_out); + break; + case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: + fmt =3D iris_venc_formats_cap; + size =3D ARRAY_SIZE(iris_venc_formats_cap); + break; + default: + return NULL; + } =20 if (index >=3D size || fmt[index].type !=3D type) return NULL; @@ -127,9 +163,11 @@ int iris_venc_enum_fmt(struct iris_inst *inst, struct = v4l2_fmtdesc *f) =20 switch (f->type) { case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: - if (f->index) + fmt =3D find_format_by_index(inst, f->index, f->type); + if (!fmt) return -EINVAL; - f->pixelformat =3D V4L2_PIX_FMT_NV12; + + f->pixelformat =3D fmt->pixfmt; break; case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE: fmt =3D find_format_by_index(inst, f->index, f->type); @@ -156,7 +194,7 @@ int iris_venc_try_fmt(struct iris_inst *inst, struct v4= l2_format *f) fmt =3D find_format(inst, pixmp->pixelformat, f->type); switch (f->type) { case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE: - if (f->fmt.pix_mp.pixelformat !=3D V4L2_PIX_FMT_NV12) { + if (!fmt) { f_inst =3D inst->fmt_src; f->fmt.pix_mp.width =3D f_inst->fmt.pix_mp.width; f->fmt.pix_mp.height =3D f_inst->fmt.pix_mp.height; @@ -221,7 +259,7 @@ static int iris_venc_s_fmt_input(struct iris_inst *inst= , struct v4l2_format *f) =20 iris_venc_try_fmt(inst, f); =20 - if (f->fmt.pix_mp.pixelformat !=3D V4L2_PIX_FMT_NV12) + if (!(find_format(inst, f->fmt.pix_mp.pixelformat, f->type))) return -EINVAL; =20 fmt =3D inst->fmt_src; @@ -289,7 +327,8 @@ int iris_venc_validate_format(struct iris_inst *inst, u= 32 pixelformat) { const struct iris_fmt *fmt =3D NULL; =20 - if (pixelformat !=3D V4L2_PIX_FMT_NV12) { + fmt =3D find_format(inst, pixelformat, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE); + if (!fmt) { fmt =3D find_format(inst, pixelformat, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLAN= E); if (!fmt) return -EINVAL; --=20 2.34.1