From nobody Tue Apr 7 20:09:01 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 270801F2B88 for ; Fri, 27 Feb 2026 14:12:15 +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=1772201536; cv=none; b=AFmUXAs2GZ9By+R2xnUXcgSKUcrE428zGmRlepl+ynLeRSuuIzXvDULBkE14/OOeya/lUKxG+woed/fr/tqd99z35MZNOkia/dyyVHvoQsAJ4SQcyTa52zCD1bVivxjsrIQvHlRuL89LbN8+lAJqYLsq4xhwKdD+/RG+/16+AFo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772201536; c=relaxed/simple; bh=SeveySSfI/qJorH6pYdXtXF7iQfXTBV5dmrq8yjh76o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t0pfkuMC3Wkyi32yD4aZrnG9eYRaUlP5A6yqtEzW3cctajNqF2CvHdEAq/X3rfuGQqxB/FnG9UGUeE/b3a5BagGsMSHS+jC2Tg8vUqBxnw2tfv3WVKscUJYZKYfEnbYS6jf4cS9t8A/0SKm2K6gZCOnmtLd/LXBYPVc3/VfiwlU= 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=IvX+qADz; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=iu1NpY4y; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="IvX+qADz"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="iu1NpY4y" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61RA5BMg2438882 for ; Fri, 27 Feb 2026 14:12: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= xTovwQOOvPdRglwYCLwleqlkL/0m7llVvmKdds1FO8Y=; b=IvX+qADzYFf2INaV DWVINda9E9lBVzJBD1RXFtfYG/TuvXRK/wrxgQx8T3zpqRv4sXEq+HY3ORgVEHML ni8aMC4dn/w5eOSetHdKqSsKcNhCLylNR3Hbs7wZRDQgXGH2alk9vz45ZdSEawTW BDeacLy3ZrjO87jM2GNvtGqBdd4TMVK5+2RhWpul3OLNEXDfbSX4Iom8TZF/nTFY KMRb3AXDx2ckxM2kver8EmfzR7bahpsevICgdQ+Bnfqnvn/C2DxGqy+1oR8h0Viv wZ3xRqq9NHlINX0irGM6xSDGdaP9/Gdcr2SSJB4Gh1EZN9NqfdCmWXs6YSd68kA1 jDaOKw== 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 4cju4r3mv1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 27 Feb 2026 14:12:14 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ae04f5897cso20403175ad.1 for ; Fri, 27 Feb 2026 06:12:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772201534; x=1772806334; 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=xTovwQOOvPdRglwYCLwleqlkL/0m7llVvmKdds1FO8Y=; b=iu1NpY4yHQFd8GU652LZShZLa0zUPAIT3d8UiChov35ypAp/leC1uv8zC4V1Y3kmrM SwIEbOKj633Gne1Pz6hSr2xUvUtCfHEKox2sGjUMyjZGrlpkNXZHmpnIgpaUWECx+K47 ElA021eSgxLmv1dB5yYg11rGKqjeUBtDk74QZZ24W8gse2HpC+vsRjNCMR7sQRYXSITg lTLsMulD3YJB5spdemR4jmx5rx2S87pz1l2c56Xi4LqCEGv+JcVyrxmtNH/UdlhfwBA0 5zDFbeOkw3wcQTzGo8sr+LIGt77QYnSISpKQ+aep59kS6M7W/wJ1rN9ifKF42s9mUP/n PAXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772201534; x=1772806334; 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=xTovwQOOvPdRglwYCLwleqlkL/0m7llVvmKdds1FO8Y=; b=nboLSdkNkHyuSFBmFQ8g9Tx3ySxaVsk3/O5e8x8zSQbxG5uWrB6Iquzi8lCe/qcv7A +06RvW2gvnxhvaMbKcfxzMV/C8LQoaMbV+RdVwHeMFGyACV07zX43SS0dinp0PRIh4C7 xJ9Ccb9bxsjXdb/zlJhkMr2h1uI7Bfz9tJfBGgVhoIB/qNYTFMLWI0YYAXSKDDS6ympt 4URUMvs8SRG2ivYgyWN9wsl3zoRoRQwqcX7DYvgtcUdFZLr90Q4fC4+HA7FzDhSBEDcf j2i/oBslmbIMHfaFsO7KWjfh4Ls8hMQG2e3hKZyD5bNPy6BGjHVqXeKKsLPro8EIet9m 0zaw== X-Forwarded-Encrypted: i=1; AJvYcCXc1xgWc7Kls/V2C4G1WagMujhKURCWj+86Mo7vHSZmdQhzL/HoO7l2N3MjjEDzwKFuju2S6+TdGncehEU=@vger.kernel.org X-Gm-Message-State: AOJu0YwyL/tEkx8UQvbuEMdzUWFHGKucNzz8shUoLDZ07T7swy1gjkyM VAV0l4nuIyt7b1MLY5yGR8qD53huckfxpq40TVteHhoGlaX/xSJ6Wxgd2iTwXdmwb7iJB7uTCbo dWEIH+AS+uy8gTFaDqZme/pMUwS6lTUEdZzgwd0yqN1lbsSCkNVKEbQkks2vbT8+ipQM= X-Gm-Gg: ATEYQzzQ+32OtNB+CElLJTA5iKdKX+9XjN0St6EYssyOHsQqb1WFFgaV4DO0e2Is3rj bplUzo++hGdwBaEYm/K7scdVLTFHZIwB0KqjjXsNST4Ex5PxyxkSNJcge3IN30K9P478VAO/P8s GlpqBqN5nqPQ0+HRr7yVVfZJJmuWDDBm28/aUi/fZVy9wi0fLu91XdRqHghPdmeMJ3H/Xe71Zgm IFIm9OHo1MMKz/lU0v/uxA0Dj3vDhTsHvPShSRRlZu4AWCIj/KFiEXjcwophOPxPE2WHpnZ1NTB Q8mfDFQU86bIVKe4ISrN9XktKAlPdNmsVSrHXk4nSDFuHxDsGgTm/Ykw8nsWjAVc4ACeG1Dm57X /sDHFAQRn5EPphMV6M20DQaiChM8WudETVQxhDWHWuhGQAwi39RZ+B5ph X-Received: by 2002:a17:903:1b2f:b0:2ad:b213:feba with SMTP id d9443c01a7336-2ae2b630f38mr34326945ad.5.1772201533621; Fri, 27 Feb 2026 06:12:13 -0800 (PST) X-Received: by 2002:a17:903:1b2f:b0:2ad:b213:feba with SMTP id d9443c01a7336-2ae2b630f38mr34326455ad.5.1772201532997; Fri, 27 Feb 2026 06:12:12 -0800 (PST) Received: from hu-vgarodia-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2adfb5c183bsm60960865ad.24.2026.02.27.06.12.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Feb 2026 06:12:12 -0800 (PST) From: Vikash Garodia Date: Fri, 27 Feb 2026 19:41:20 +0530 Subject: [PATCH v2 4/7] media: iris: add context bank devices using iommu-map 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: <20260227-kaanapali-iris-v2-4-850043ac3933@oss.qualcomm.com> References: <20260227-kaanapali-iris-v2-0-850043ac3933@oss.qualcomm.com> In-Reply-To: <20260227-kaanapali-iris-v2-0-850043ac3933@oss.qualcomm.com> To: Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Saravana Kannan , Joerg Roedel , Will Deacon , Robin Murphy , Stefan Schmidt , Hans Verkuil , Krzysztof Kozlowski , Vishnu Reddy , Hans Verkuil Cc: linux-arm-msm@vger.kernel.org, linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, iommu@lists.linux.dev, Bryan O'Donoghue , Vikash Garodia X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772201499; l=6900; i=vikash.garodia@oss.qualcomm.com; s=20241104; h=from:subject:message-id; bh=SeveySSfI/qJorH6pYdXtXF7iQfXTBV5dmrq8yjh76o=; b=C/mKyfUHTEmJWqu1Vc2ZyZAu9AfVzIgQbZRGzwzS0g1aB/iKCHUUMAB81CuIqpQosJNf7M1sM PS8x8RradwnDiDGaDhL4s2V0NEqaPNWeuUVGvYjeIrerRAWQnKOcBuU X-Developer-Key: i=vikash.garodia@oss.qualcomm.com; a=ed25519; pk=LY9Eqp4KiHWxzGNKGHbwRFEJOfRCSzG/rxQNmvZvaKE= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDEyNSBTYWx0ZWRfX8lzUB357hULT IH++5bixMEUHww44VPQietKke4ey5bgeMfgAKNeuiyzNCuEuwHa9x4Wx6jMeD7TWuWOSCkJ55dO GRz4YxbvjF8oPgGX4qtkwRqxtaJzeI1xuhKuYiW3tmCb/Dra8V0cxx862eJJKPYbgfF5cVHW5me tyeBvjQp7dpbRfchhOxBLQO9cf1aai4MBM9s7OMgIsCchbMftGHVmwvySe5qwZbtIh4I7fHprMb mewpHUhFsQnARnczP9Bmne1y4l3Cq1CwaNMLyMw5oNMKGLp7fMdlupimu+LFQZjGiDVI/qxmTrx nFY9gB9hEluTkSCwr0/YEAlKdmygODUjksCHuK1Qu3WCHiC20bbLRFHFMoZEhrBlr8liruf/g3H Ig7ikd/u28saYSc2jtMwed3CKUM9eDPEiimj+ZEqcTF8a+50r7/7GiTHSOzeEsgPoowvcLAvw+b a1vHdu7nJ5Dzc3x/3HQ== X-Proofpoint-GUID: uE_AQEvOho9zQrBbbU2fczgh5anCNAt2 X-Authority-Analysis: v=2.4 cv=KZzfcAYD c=1 sm=1 tr=0 ts=69a1a63e cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=a9SONYdpYu3_EFigF_wA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-ORIG-GUID: uE_AQEvOho9zQrBbbU2fczgh5anCNAt2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-27_02,2026-02-27_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 lowpriorityscore=0 priorityscore=1501 suspectscore=0 malwarescore=0 bulkscore=0 adultscore=0 phishscore=0 spamscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602270125 Introduce different context banks(CB) and the associated buffer region. Different stream IDs from VPU would be associated to one of these CB. Multiple CBs are needed to increase the IOVA for the video usecases like higher concurrent sessions. Co-developed-by: Vishnu Reddy Signed-off-by: Vishnu Reddy Signed-off-by: Vikash Garodia --- .../platform/qcom/iris/iris_platform_common.h | 18 +++++++ drivers/media/platform/qcom/iris/iris_probe.c | 60 ++++++++++++++++++= ++-- drivers/media/platform/qcom/iris/iris_resources.c | 36 +++++++++++++ drivers/media/platform/qcom/iris/iris_resources.h | 1 + 4 files changed, 111 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index 5a489917580eb10022fdcb52f7321a915e8b239d..03c50d6e54853fca34d7d32f65d= 09eb80945fcdd 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -204,6 +204,22 @@ struct icc_vote_data { u32 fps; }; =20 +enum iris_buffer_region { + IRIS_BITSTREAM_REGION =3D BIT(0), + IRIS_NON_PIXEL_REGION =3D BIT(1), + IRIS_PIXEL_REGION =3D BIT(2), + IRIS_SECURE_BITSTREAM_REGION =3D BIT(3), + IRIS_SECURE_NON_PIXEL_REGION =3D BIT(4), + IRIS_SECURE_PIXEL_REGION =3D BIT(5), +}; + +struct iris_context_bank { + struct device *dev; + const char *name; + const u32 f_id; + const enum iris_buffer_region region; +}; + enum platform_pm_domain_type { IRIS_CTRL_POWER_DOMAIN, IRIS_HW_POWER_DOMAIN, @@ -246,6 +262,8 @@ struct iris_platform_data { u32 inst_fw_caps_enc_size; const struct tz_cp_config *tz_cp_config_data; u32 tz_cp_config_data_size; + struct iris_context_bank *cb_data; + u32 cb_data_size; u32 core_arch; u32 hw_response_timeout; struct ubwc_config_data *ubwc_config; diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/= platform/qcom/iris/iris_probe.c index ddaacda523ecb9990af0dd0640196223fbcc2cab..557adb038328a75510591d91569= 819abc0b7b1c9 100644 --- a/drivers/media/platform/qcom/iris/iris_probe.c +++ b/drivers/media/platform/qcom/iris/iris_probe.c @@ -123,6 +123,49 @@ static int iris_init_resets(struct iris_core *core) core->iris_platform_data->controller_rst_tbl_size); } =20 +static void iris_destroy_child_device(struct iris_context_bank *cb) +{ + struct device *dev =3D cb->dev; + + if (dev) + device_unregister(dev); + + cb->dev =3D NULL; +} + +static void iris_deinit_context_bank_devices(struct iris_core *core) +{ + struct iris_context_bank *cb; + int i; + + for (i =3D 0; i < core->iris_platform_data->cb_data_size; i++) { + cb =3D &core->iris_platform_data->cb_data[i]; + iris_destroy_child_device(cb); + } +} + +static int iris_init_context_bank_devices(struct iris_core *core) +{ + struct iris_context_bank *cb; + int ret, i; + + for (i =3D 0; i < core->iris_platform_data->cb_data_size; i++) { + cb =3D &core->iris_platform_data->cb_data[i]; + + ret =3D iris_create_child_device_and_map(core, cb); + if (ret) + goto err_deinit_cb; + } + + return 0; + +err_deinit_cb: + while (i-- > 0) + iris_destroy_child_device(&core->iris_platform_data->cb_data[i]); + + return ret; +} + static int iris_init_resources(struct iris_core *core) { int ret; @@ -193,6 +236,7 @@ static void iris_remove(struct platform_device *pdev) return; =20 iris_core_deinit(core); + iris_deinit_context_bank_devices(core); =20 video_unregister_device(core->vdev_dec); video_unregister_device(core->vdev_enc); @@ -275,12 +319,18 @@ static int iris_probe(struct platform_device *pdev) =20 platform_set_drvdata(pdev, core); =20 - dma_mask =3D core->iris_platform_data->dma_mask; - - ret =3D dma_set_mask_and_coherent(dev, dma_mask); + ret =3D iris_init_context_bank_devices(core); if (ret) goto err_vdev_unreg_enc; =20 + dma_mask =3D core->iris_platform_data->dma_mask; + + if (device_iommu_mapped(core->dev)) { + ret =3D dma_set_mask_and_coherent(core->dev, dma_mask); + if (ret) + goto err_deinit_cb; + } + dma_set_max_seg_size(&pdev->dev, DMA_BIT_MASK(32)); dma_set_seg_boundary(&pdev->dev, DMA_BIT_MASK(32)); =20 @@ -288,10 +338,12 @@ static int iris_probe(struct platform_device *pdev) pm_runtime_use_autosuspend(core->dev); ret =3D devm_pm_runtime_enable(core->dev); if (ret) - goto err_vdev_unreg_enc; + goto err_deinit_cb; =20 return 0; =20 +err_deinit_cb: + iris_deinit_context_bank_devices(core); err_vdev_unreg_enc: video_unregister_device(core->vdev_enc); err_vdev_unreg_dec: diff --git a/drivers/media/platform/qcom/iris/iris_resources.c b/drivers/me= dia/platform/qcom/iris/iris_resources.c index 773f6548370a257b8ae7332242544266cbbd61a9..be58e8620086d0f82c2c2bda292= 47483f5c56d79 100644 --- a/drivers/media/platform/qcom/iris/iris_resources.c +++ b/drivers/media/platform/qcom/iris/iris_resources.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -141,3 +142,38 @@ int iris_disable_unprepare_clock(struct iris_core *cor= e, enum platform_clk_type =20 return 0; } + +static void iris_device_release(struct device *dev) +{ + dev_set_drvdata(dev, NULL); + kfree(dev); +} + +int iris_create_child_device_and_map(struct iris_core *core, struct iris_c= ontext_bank *cb) +{ + struct device *dev; + int ret; + + dev =3D kzalloc_obj(*dev); + if (!dev) + return -ENOMEM; + + dev->release =3D iris_device_release; + dev->bus =3D &iris_vpu_bus_type; + dev->parent =3D core->dev; + dev->coherent_dma_mask =3D core->iris_platform_data->dma_mask; + dev->dma_mask =3D &dev->coherent_dma_mask; + + dev_set_name(dev, "%s", cb->name); + dev_set_drvdata(dev, cb); + + ret =3D device_register(dev); + if (ret) { + put_device(dev); + return ret; + } + + cb->dev =3D dev; + + return 0; +} diff --git a/drivers/media/platform/qcom/iris/iris_resources.h b/drivers/me= dia/platform/qcom/iris/iris_resources.h index 6bfbd2dc6db095ec05e53c894e048285f82446c6..b7efe15facb203eea9ae13d5f0a= bdcc2ea718b4d 100644 --- a/drivers/media/platform/qcom/iris/iris_resources.h +++ b/drivers/media/platform/qcom/iris/iris_resources.h @@ -15,5 +15,6 @@ int iris_unset_icc_bw(struct iris_core *core); int iris_set_icc_bw(struct iris_core *core, unsigned long icc_bw); int iris_disable_unprepare_clock(struct iris_core *core, enum platform_clk= _type clk_type); int iris_prepare_enable_clock(struct iris_core *core, enum platform_clk_ty= pe clk_type); +int iris_create_child_device_and_map(struct iris_core *core, struct iris_c= ontext_bank *cb); =20 #endif --=20 2.34.1