From nobody Thu Apr 9 12:09:29 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 505C037A4AA for ; Fri, 27 Feb 2026 06:51:13 +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=1772175074; cv=none; b=rJfgunorBbX7+TM47JtT1Qw6zGXmSobyeQ/0JDG8v3F1iXv5Q0j4XWKD5l3mwI1FOapUQsccU74kdGV4XIBO86vlnaOuOlkfyZKuntOEUCIm1ffxvEAfqujeD64h76Eky8dN0KOnbHwETK6gzU52Un1j+UJ4UAfrvQV1KIq34EA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772175074; c=relaxed/simple; bh=Xg8v6dTOR7l+rYqJZ5BHS/ncEr9/7cJ2G9rzTn9NgJY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bXq675szwGaYZxLJME8Skg/EH/zSjAdR1lasIChoaXmaIWvPkDOEl9QjRTsBCyWWmldwiADEBK1yye+8mA0Wm4cFJ05R13SOzm/l6jiFkr9sVG9sKey5Ep5dzriC3DCwH/G0nUTVoQQFa/CsVsWn7sFvcSbwx6tCcavSUa6+IUI= 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=EyIuFQIy; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eu1m1NHi; 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="EyIuFQIy"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eu1m1NHi" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R2KCjX2982597 for ; Fri, 27 Feb 2026 06:51:12 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= t+h8zI22njroufZfTDg7+r1xw8mysdeduU+UHBap1K8=; b=EyIuFQIyYX9bHnTq GFYqS66OLe/qUeNiAgJUtbNOj/Xbh+OMOKAbWIbq7ooQIK1if1TXXZ5VdLua61mF lmA+f3eLO7hB19iBoAc8hcbE6zmIp3wTMrReDVc73HX5f8e4Ul+kql+iJKPpsf1u fOZQvT+f9Mwp0Myij+oJtwnoDnnbJR7GDxFQR1DOkwRm/5Iwm2/cwT56vppNyFaH Hko+9OvtAZvRLHTiAHyDWb9Z1NEoGUPsxFdlvxUUzLmu+YGaCCODH+8t8nUqoZzH cwZl4+k3ITNkYep7iXID8Go4DP9UKEWL/EwQZON4Tg3fco6CW1XYF/CpBgJuDUVU GlAioQ== Received: from mail-pj1-f69.google.com (mail-pj1-f69.google.com [209.85.216.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cjk2v433h-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 27 Feb 2026 06:51:12 +0000 (GMT) Received: by mail-pj1-f69.google.com with SMTP id 98e67ed59e1d1-358e95e81aeso8152561a91.0 for ; Thu, 26 Feb 2026 22:51:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772175072; x=1772779872; 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=t+h8zI22njroufZfTDg7+r1xw8mysdeduU+UHBap1K8=; b=eu1m1NHiTJHZmlkp1fvWMlnOrD05npFEvBVDnWNtHkTQ7f+dW9NfW7F05zxibL9P7l DVX5iG9dj/gp8pTkmZcBtMTCHPovxzO2JOdxovmcpg7ONf/48aWrAPD90ootDhGaKD9f AZdBtPJd/Z5vfz++hPXf5wcC++EBbYz1LQrI6oBGJwRdfr09FyI1PuSnOUHQUbnmO2cM 3Od7BKtncX/bH0IC/9R+6zGSw4KPZqSScyJXNL0byn7jWoq/CROMwnqXJrVrfixd2C3A F7KTBGLwk+nIn6nB8clMy1Aox8LUnZ+VZvFqZQ1kWNcwHj5c8UKuI164/GqtUfXd+4f8 ImQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772175072; x=1772779872; 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=t+h8zI22njroufZfTDg7+r1xw8mysdeduU+UHBap1K8=; b=wqPUoFhBXotowWInzIKwPfKZlWMJtPxVXnmJ+Ao4mbM17K2XnCgpDNn30VxiOFGk24 McSK5jwk/JosnEuKs8fHiK6n4IJZMKjPZLx12DZn/s1NnbGK/WEsPTNnMKfBF+NpcG/Z mO+VuujZPWHsQzUWofXlY/5ISjTBVH+wGgPMxFZRrz6WE18KGeEve4FIbFSx92wHk77/ rTueDQZz8PxEhuX8NIyszea0JZUw+o3rwVzdloe1gyScLCsVHvsvzKk7nZYO6WlCw1+B T532f44begHs1ByxFbQ2aXMCyPJgB+9CgI6y9RtvqDiN5AgazhJEda79Axh9GfO/fAAi GNjg== X-Forwarded-Encrypted: i=1; AJvYcCXQwxJ+bDimG6Re2eCqe1uFL47nAClcet6IZ8MGN8hskj7VMP30gBMYzB05cf/waXf/BjK6e6CPrPiqeJU=@vger.kernel.org X-Gm-Message-State: AOJu0YyhN9HBLVwVwnmnJermLF6chJkF9uvOhUb2R1CdVTV5OT//6jjx mqsoyAeKDl6pSetAXkbEjFLWVimZXuypHfkx6/1oLFZluyfXTjil/JXEN7SGzABOydO9CkutzUC Fmsni3FcQ8w82XMIJod/i7DlNCUO++VEO9J3hDkE16BHeOUsZ5rcxJ+tMDufv+dYus60= X-Gm-Gg: ATEYQzw1oYHVC1aceXrrw+BYZQE4aIPv7dqr7XkhfyMlq1vb/N37Up45y+YUVlVXHj4 hlZz+YGz8OiL070aYXgUEJ8cPb5xH5OwV+dVlWhjj6CmXxngdGf5BuZdhT+oQhNMS4Gl2KVM7uI 5P/JxW3gwALJyxdaqTBE1nnNNJ3TvNp+D6arGZlRuqyr6oiFovvA9ZF9/8mNdwyrRgZA4+i3PuO WczPo+4d4VmWlGxc7P+5lm2F4HlPyoAby8Yclp01SyA9t5kIc5YN4M+o6q2t59+X3SIis8VzIBj BfNsv2EPXuLy+V47PcpMPkWs/HLiRDCzSAzodcWjDlEDlSAfIZbk3o4Ccsr4TMFzL3tev20h/Xc kbKyvVupAp1ubfK5/hKcv6/+tY1mxAW9NWddEeB34Ur4oSh4zgStl+5KPrb4= X-Received: by 2002:a05:6300:218f:b0:366:14b0:1a30 with SMTP id adf61e73a8af0-395c3b16a8dmr2030995637.62.1772175071777; Thu, 26 Feb 2026 22:51:11 -0800 (PST) X-Received: by 2002:a05:6300:218f:b0:366:14b0:1a30 with SMTP id adf61e73a8af0-395c3b16a8dmr2030970637.62.1772175071259; Thu, 26 Feb 2026 22:51:11 -0800 (PST) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c70fa5ea0dcsm3455880a12.3.2026.02.26.22.51.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 22:51:10 -0800 (PST) From: Dikshita Agarwal Date: Fri, 27 Feb 2026 12:21:01 +0530 Subject: [PATCH v2 1/3] media: iris: Switch to hardware mode after firmware boot 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-iris_sc7280_gen2_support-v2-1-7e5b13d26542@oss.qualcomm.com> References: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> In-Reply-To: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Hans Verkuil , Vishnu Reddy Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dikshita Agarwal X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772175063; l=9610; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=3w4YxljxZfU/68M/TpPRKviOI50EzCzvfFM0AfUGESI=; b=+S9L+XXLlbu/2C58Jr7dxav27aVzzwY2WrUBQCQQlwUK9+AvRdCSEwqTom/UIof2HHpNrPnY+ xFt4B/TkoJECPeR4Hisa/EP4+KVKNGuAWIvVZVph03QL/P7S/tsFx7m X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-ORIG-GUID: GVMkzOxHmPz27Fonphj3M4HZdGvpSdEM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDA1NyBTYWx0ZWRfX0eF9SlgjAUZB Betx+8k8+fXt760aE6WEQk3w26sW7DvFuT+TNbnt+9HASHmIn4jtSSHNyKWAFLLqaFFaZzRVbGQ uFl4KztOWCtZfqs0MoOd/rOcKqUYypQ+cO6u0Ug0iUOTgd1dq9cXDytifGICn1B+MIXxgy7EfdR y5SaF8Z02dkQH6Fz1Ob4hyCOhcrboKmurBoyAbyMcvsPnfTitrmVvmKgn3q2NNCqroVbjLUSNA8 0kHu2PxUJwr1XZBI+xsCnf9aK6/9GfYgyYhdGpl0yA12+MJoX13emOEJG1V674IlktSHYGtiZ+u E7ezoFbGiE03LfkCCXM+bCGwi+/lNUNVPxohw7/knc8qUcLl1qfkqVOlSv5lP3BjmGS17IST4GV T2o8IDsyFO0juOYDZsbvZJGdtQd0JtdHnOhM6CYlapg5ERurN2N/wHPZvTsr4vMCDEKu6fWEU1V svbFk8jqV2RU3nnteOw== X-Authority-Analysis: v=2.4 cv=PO8COPqC c=1 sm=1 tr=0 ts=69a13ee0 cx=c_pps a=vVfyC5vLCtgYJKYeQD43oA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=8QxTX33zP25rWUhdfb4A:9 a=QEXdDO2ut3YA:10 a=rl5im9kqc5Lf4LNbBjHf:22 X-Proofpoint-GUID: GVMkzOxHmPz27Fonphj3M4HZdGvpSdEM 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_01,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 spamscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602270057 From: Vikash Garodia Currently the driver switches the vcodec GDSC to hardware (HW) mode before firmware load and boot sequence. GDSC can be powered off, keeping in hw mode, thereby the vcodec registers programmed in TrustZone (TZ) carry default (reset) values. Move the transition to HW mode after firmware load and boot sequence. The bug was exposed with driver configuring different stream ids to different devices via iommu-map. With registers carrying reset values, VPU would not generate desired stream-id, thereby leading to SMMU fault. The efuse tells us which hardware blocks are actually present. If efuse status is disabled for a block, the driver will skip powering it on or resetting it. otherwise the driver will perform the necessary resets and then switch that block into hardware mode. This makes sure we only touch hardware that really exists and is enabled on the silicon. Fixes: dde659d37036 ("media: iris: Introduce vpu ops for vpu4 with necessar= y hooks") Co-developed-by: Vishnu Reddy Signed-off-by: Vishnu Reddy Signed-off-by: Vikash Garodia Signed-off-by: Dikshita Agarwal --- drivers/media/platform/qcom/iris/iris_core.c | 4 ++++ drivers/media/platform/qcom/iris/iris_hfi_common.c | 4 ++++ drivers/media/platform/qcom/iris/iris_vpu2.c | 1 + drivers/media/platform/qcom/iris/iris_vpu3x.c | 9 +++----- drivers/media/platform/qcom/iris/iris_vpu4x.c | 24 ++++++++++++------= ---- drivers/media/platform/qcom/iris/iris_vpu_common.c | 16 +++++++++------ drivers/media/platform/qcom/iris/iris_vpu_common.h | 3 +++ 7 files changed, 38 insertions(+), 23 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_core.c b/drivers/media/p= latform/qcom/iris/iris_core.c index 8406c48d635b6eba0879396ce9f9ae2292743f09..dbaac01eb15a0e622e85635fddd= 29c1f7fc18662 100644 --- a/drivers/media/platform/qcom/iris/iris_core.c +++ b/drivers/media/platform/qcom/iris/iris_core.c @@ -75,6 +75,10 @@ int iris_core_init(struct iris_core *core) if (ret) goto error_unload_fw; =20 + ret =3D iris_vpu_switch_to_hwmode(core); + if (ret) + goto error_unload_fw; + ret =3D iris_hfi_core_init(core); if (ret) goto error_unload_fw; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_common.c b/drivers/m= edia/platform/qcom/iris/iris_hfi_common.c index 92112eb16c11048e28230a2926dfb46e3163aada..621c66593d88d47ef3438c98a07= cb29421c4e375 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_common.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_common.c @@ -159,6 +159,10 @@ int iris_hfi_pm_resume(struct iris_core *core) if (ret) goto err_suspend_hw; =20 + ret =3D iris_vpu_switch_to_hwmode(core); + if (ret) + goto err_suspend_hw; + ret =3D ops->sys_interframe_powercollapse(core); if (ret) goto err_suspend_hw; diff --git a/drivers/media/platform/qcom/iris/iris_vpu2.c b/drivers/media/p= latform/qcom/iris/iris_vpu2.c index 9c103a2e4e4eafee101a8a9b168fdc8ca76e277d..01ef40f3895743b3784464e2d5b= a2de1aeca5a4a 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu2.c +++ b/drivers/media/platform/qcom/iris/iris_vpu2.c @@ -44,4 +44,5 @@ const struct vpu_ops iris_vpu2_ops =3D { .power_off_controller =3D iris_vpu_power_off_controller, .power_on_controller =3D iris_vpu_power_on_controller, .calc_freq =3D iris_vpu2_calc_freq, + .set_hwmode =3D iris_vpu_set_hwmode, }; diff --git a/drivers/media/platform/qcom/iris/iris_vpu3x.c b/drivers/media/= platform/qcom/iris/iris_vpu3x.c index fe4423b951b1e9e31d06dffc69d18071cc985731..3dad47be78b58f6cd5ed6f333b3= 376571a04dbf0 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu3x.c +++ b/drivers/media/platform/qcom/iris/iris_vpu3x.c @@ -234,14 +234,8 @@ static int iris_vpu35_power_on_hw(struct iris_core *co= re) if (ret) goto err_disable_hw_free_clk; =20 - ret =3D dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER= _DOMAIN], true); - if (ret) - goto err_disable_hw_clk; - return 0; =20 -err_disable_hw_clk: - iris_disable_unprepare_clock(core, IRIS_HW_CLK); err_disable_hw_free_clk: iris_disable_unprepare_clock(core, IRIS_HW_FREERUN_CLK); err_disable_axi_clk: @@ -266,6 +260,7 @@ const struct vpu_ops iris_vpu3_ops =3D { .power_off_controller =3D iris_vpu_power_off_controller, .power_on_controller =3D iris_vpu_power_on_controller, .calc_freq =3D iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode =3D iris_vpu_set_hwmode, }; =20 const struct vpu_ops iris_vpu33_ops =3D { @@ -274,6 +269,7 @@ const struct vpu_ops iris_vpu33_ops =3D { .power_off_controller =3D iris_vpu33_power_off_controller, .power_on_controller =3D iris_vpu_power_on_controller, .calc_freq =3D iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode =3D iris_vpu_set_hwmode, }; =20 const struct vpu_ops iris_vpu35_ops =3D { @@ -283,4 +279,5 @@ const struct vpu_ops iris_vpu35_ops =3D { .power_on_controller =3D iris_vpu35_vpu4x_power_on_controller, .program_bootup_registers =3D iris_vpu35_vpu4x_program_bootup_registers, .calc_freq =3D iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode =3D iris_vpu_set_hwmode, }; diff --git a/drivers/media/platform/qcom/iris/iris_vpu4x.c b/drivers/media/= platform/qcom/iris/iris_vpu4x.c index a8db02ce5c5ec583c4027166b34ce51d3d683b4e..02e100a4045fced33d7a3545b63= 2cc5f0955233f 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu4x.c +++ b/drivers/media/platform/qcom/iris/iris_vpu4x.c @@ -252,21 +252,10 @@ static int iris_vpu4x_power_on_hardware(struct iris_c= ore *core) ret =3D iris_vpu4x_power_on_apv(core); if (ret) goto disable_hw_clocks; - - iris_vpu4x_ahb_sync_reset_apv(core); } =20 - iris_vpu4x_ahb_sync_reset_hardware(core); - - ret =3D iris_vpu4x_genpd_set_hwmode(core, true, efuse_value); - if (ret) - goto disable_apv_power_domain; - return 0; =20 -disable_apv_power_domain: - if (!(efuse_value & DISABLE_VIDEO_APV_BIT)) - iris_vpu4x_power_off_apv(core); disable_hw_clocks: iris_vpu4x_disable_hardware_clocks(core, efuse_value); disable_vpp1_power_domain: @@ -359,6 +348,18 @@ static void iris_vpu4x_power_off_hardware(struct iris_= core *core) iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_HW_POWE= R_DOMAIN]); } =20 +static int iris_vpu4x_set_hwmode(struct iris_core *core) +{ + u32 efuse_value =3D readl(core->reg_base + WRAPPER_EFUSE_MONITOR); + + if (!(efuse_value & DISABLE_VIDEO_APV_BIT)) + iris_vpu4x_ahb_sync_reset_apv(core); + + iris_vpu4x_ahb_sync_reset_hardware(core); + + return iris_vpu4x_genpd_set_hwmode(core, true, efuse_value); +} + const struct vpu_ops iris_vpu4x_ops =3D { .power_off_hw =3D iris_vpu4x_power_off_hardware, .power_on_hw =3D iris_vpu4x_power_on_hardware, @@ -366,4 +367,5 @@ const struct vpu_ops iris_vpu4x_ops =3D { .power_on_controller =3D iris_vpu35_vpu4x_power_on_controller, .program_bootup_registers =3D iris_vpu35_vpu4x_program_bootup_registers, .calc_freq =3D iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode =3D iris_vpu4x_set_hwmode, }; diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_common.c index 548e5f1727fdb7543f76a1871f17257fa2360733..69e6126dc4d95ed9e5fccf59620= 5e84ec0bfc82d 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_common.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.c @@ -292,14 +292,8 @@ int iris_vpu_power_on_hw(struct iris_core *core) if (ret && ret !=3D -ENOENT) goto err_disable_hw_clock; =20 - ret =3D dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER= _DOMAIN], true); - if (ret) - goto err_disable_hw_ahb_clock; - return 0; =20 -err_disable_hw_ahb_clock: - iris_disable_unprepare_clock(core, IRIS_HW_AHB_CLK); err_disable_hw_clock: iris_disable_unprepare_clock(core, IRIS_HW_CLK); err_disable_power: @@ -308,6 +302,16 @@ int iris_vpu_power_on_hw(struct iris_core *core) return ret; } =20 +int iris_vpu_set_hwmode(struct iris_core *core) +{ + return dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_= DOMAIN], true); +} + +int iris_vpu_switch_to_hwmode(struct iris_core *core) +{ + return core->iris_platform_data->vpu_ops->set_hwmode(core); +} + int iris_vpu35_vpu4x_power_off_controller(struct iris_core *core) { u32 clk_rst_tbl_size =3D core->iris_platform_data->clk_rst_tbl_size; diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.h b/drivers/m= edia/platform/qcom/iris/iris_vpu_common.h index f6dffc613b822341fb21e12de6b1395202f62cde..dee3b1349c5e869619c7f7c294d= d711f9ff72b92 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_common.h +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.h @@ -21,6 +21,7 @@ struct vpu_ops { int (*power_on_controller)(struct iris_core *core); void (*program_bootup_registers)(struct iris_core *core); u64 (*calc_freq)(struct iris_inst *inst, size_t data_size); + int (*set_hwmode)(struct iris_core *core); }; =20 int iris_vpu_boot_firmware(struct iris_core *core); @@ -30,6 +31,8 @@ int iris_vpu_watchdog(struct iris_core *core, u32 intr_st= atus); int iris_vpu_prepare_pc(struct iris_core *core); int iris_vpu_power_on_controller(struct iris_core *core); int iris_vpu_power_on_hw(struct iris_core *core); +int iris_vpu_set_hwmode(struct iris_core *core); +int iris_vpu_switch_to_hwmode(struct iris_core *core); int iris_vpu_power_on(struct iris_core *core); int iris_vpu_power_off_controller(struct iris_core *core); void iris_vpu_power_off_hw(struct iris_core *core); --=20 2.34.1 From nobody Thu Apr 9 12:09:29 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 D62CD36B060 for ; Fri, 27 Feb 2026 06:51:16 +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=1772175078; cv=none; b=hU+iv8C5lPEw9XEJQrPflimLkS5FoA9IQqZp4MCQtJwyqfcYM2KTsBZK48mVfhtTAxImEgLMNv4Z4GU8ma7nZ/x2+6PJTMbhUdC8FCDUPT2ivr5+kWuIxAHmKrsk5F3BBS6EDRVGiSdaDYRXKax4NiFhjnseAx+vVAzesm4p42c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772175078; c=relaxed/simple; bh=FZ3ARdYGTQxmH6JaV2ra/jpTuBox548HjHD9kKuTQec=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qMUe2X8waJ/HrIHhq7tkXyCOYEX4T44TXE2uyrKvyiNVm+EUnFWx6+6WzMhbwkuSxNCwk+AhFx8QHV+7zjfCcfpSYBMvLHZjBMMqR7mG/Vnly6JK46+tMsmFFiesgjEZRDpoT1vyz4BnST5E/lhzHrPmdjHiYBTLKLisWtBiTgk= 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=Br2U/9G0; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Y2KrLYJE; 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="Br2U/9G0"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Y2KrLYJE" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R2KCAh236351 for ; Fri, 27 Feb 2026 06:51:16 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= Z/JqWa6Wha8fsH3fI3J8ue3gixQVohxYTLtBUxECfyM=; b=Br2U/9G0JyW69Yt8 4O1rupikwWvCOXV9a5an1wEVtp6E0FIZ82FmcPeWtWjxi+5H6/JEmMZRXZvqyIvF plNuxZ8+fg2G3UNw9nGT9YYi6A/AH6X2ruBS098xG/7/a4736p+BcYnvxb96A2mU NQByd3jjCMe5BsG34g/mpOOZIHr42RK4/GNOI3QZukRGUg/0StHgof6xIM480Op7 hTFJWZ5qK2aJZH21F8yhe7vl27sDMxZ8fBan/c2J6FFWZWUJSJ2C+KdytZksNvXk Fxvi/vUCWJeTMdoMBmXquFZCGQ1KDhpI7RSxHPS5/AcIvszB1ShGFeN23a+oJwPR tKfUmQ== Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cjx1xsens-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 27 Feb 2026 06:51:16 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-b630b4d8d52so1164226a12.3 for ; Thu, 26 Feb 2026 22:51:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772175076; x=1772779876; 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=Z/JqWa6Wha8fsH3fI3J8ue3gixQVohxYTLtBUxECfyM=; b=Y2KrLYJElZim03TuLGzxiXluFNthP1kPhPo7IIxFm0WUq/5rbhThagjUJllcBAS8OM 6+6i/KovSE5wUN74zLFPzOak0lJFfmPQED93CQCEhfkliPfxI0QK0udjdVCJgEasVikT qnLcrznRpom9fNKbSIgFSkN9UYLRjpJwhtMwcUAyTgjQHETB1Qb03V5RVWmeGbShuIdl qw/9cC2zRilMavstbF+++oWXg4xvKjIjL2yGLClzsE7O2L5e2v+2bU2THJu0/2OhjWee c6jvcWwPUcApiYtyjaakS7H56xuP+8s+7RdkvMjiKIRX44080JBDKWzuO4xq9rgWLDYx DH9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772175076; x=1772779876; 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=Z/JqWa6Wha8fsH3fI3J8ue3gixQVohxYTLtBUxECfyM=; b=WEtnuRJk8yrzXWuHwFKq3pazOkZ3WW9LJipvJUUarkFD/7KX+2YD/qrokpW7tGgON+ c7p6QqRI/JBtqDkdWJUVzulcz2VSizS8ZC/NeFz+nKYfnL5pBrhFp8nY61maFpHgcdTM tQahVUvO0sFZdamavFlnmYpkRgRx7GPvInbxL1rZ6HCE+1YLtnqPcz5HZ/3+a7JRAUcm 3tB9qH6vpj0DjWLYcqoYHw7as09JGkujLXx1+Dhb6+QjUaqaw7TIirO1BoniMSKKCAaf 71uF06H4l4FdrAfDcPu5fF8umamV4lIewCopd9jdHH2fqZ6PTPRAnw2J0npbINemz4iT J8gg== X-Forwarded-Encrypted: i=1; AJvYcCUq6jvVmF2CaUS0gJtuN18bqm1uXkFm1yoEn+g8lbAnnvLknEgz98VBLeT9GnpAAug55CnmyMyyFJ4x1HQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/XjcRfB7augCVn+VRqmVjfIf8E1Jdr1fWhlu1n/z62NjHCf/Q CsNEKQOwitKGBf75QNcUwgDHgi9ds11iSY4Pl45tZOb/pmpMS7LIfhXbRAX/WWPCVstzOA0OaF+ S9OZFUBWRkZRaoLiC8EiKX3AjiopuSg2Z8X4gn9IzIZ6ur56H+Dsk9bntLNSYlhmxTfk= X-Gm-Gg: ATEYQzwxKZJD4aq9npwIdsGSVGgS9SGN2aaSwtQCRXXe0kDbvlvPZ1el4Z670nsKKXR mGBR3z9ED+ADYgjuQtJrBTu4nYoRDsszMf0lE+16kpgNf0scipMvnF2dBcHOVckhFhAonXqI7nH QEwtCHEp451Rm07oK+SjAWSYnLhE/ydRVfAfBcTRahGN9Sy7Nw97t2iKs6QB9K6X+ZPDDzlXq4P D9p6kjmR6vyywaem80u9r7VRHWdyUwYduTlK1nJO1NLwpWkHy7Yexy98XyWL7u2A0upIaMvw3tM lvjOybSlTuK3+OAqq4OsVWHsp7Du91+kYz299ybUL42+SP3M+5NSN5zn2qq20H5yeoFZEVmvKPg 9kX/b/bf/VVo58rz2NWYKt+EZz0AR6khzw4O9XnlEtPVTnH4ivfWoXidW/DE= X-Received: by 2002:a05:6a20:258d:b0:395:151c:4eda with SMTP id adf61e73a8af0-395c3ae7748mr2004217637.45.1772175075597; Thu, 26 Feb 2026 22:51:15 -0800 (PST) X-Received: by 2002:a05:6a20:258d:b0:395:151c:4eda with SMTP id adf61e73a8af0-395c3ae7748mr2004189637.45.1772175075075; Thu, 26 Feb 2026 22:51:15 -0800 (PST) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c70fa5ea0dcsm3455880a12.3.2026.02.26.22.51.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 22:51:14 -0800 (PST) From: Dikshita Agarwal Date: Fri, 27 Feb 2026 12:21:02 +0530 Subject: [PATCH v2 2/3] media: iris: Initialize HFI ops after firmware load in core init 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-iris_sc7280_gen2_support-v2-2-7e5b13d26542@oss.qualcomm.com> References: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> In-Reply-To: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Hans Verkuil , Vishnu Reddy Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dikshita Agarwal , Bryan O'Donoghue X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772175063; l=3309; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=FZ3ARdYGTQxmH6JaV2ra/jpTuBox548HjHD9kKuTQec=; b=KMnntYNUbenjJXL/p1ZcDIpmepXzrO5DsGgQ8grRfHj3nf49AavUjF+J4rGc//0Z4B6gRsjDL C0Vb85KsF1TDllCfO6TesEXUFe8D+EpyV7fk9WjCSEueDDC6Q/d1Pel X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-ORIG-GUID: nZYWITezJsCHsJPISpbHe3NT6ay8_0rV X-Authority-Analysis: v=2.4 cv=Vtouwu2n c=1 sm=1 tr=0 ts=69a13ee4 cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=KKAkSRfTAAAA:8 a=EUspDBNiAAAA:8 a=3tfMAF2nT37deXqZlAYA:9 a=QEXdDO2ut3YA:10 a=3WC7DwWrALyhR5TkjVHa:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDA1NyBTYWx0ZWRfX4nfC/c7FfTHs KMbptxebiLrO6mfv0+NimDUNfskbHX0zNqMRDPkCwCSGAAi0DINMbOhNvCpgSH46wf2tvCRgshX /v8E0BWnbIhXJoHkcTqu5Uz9herxYiLbtLrNr71kkSBKc4j234SNbehGgJpzt2lUQ5J/Hzu5vS0 N7WvtEMH+KXlEmAEhZMSXGdQzemBg6lKwCBwxhZoudjy22nMrmAFFfHSdSfY674cHO+Y6kizDhG 8eNDJtOAh6ldynQLFg0EMC55eu1yIhdxA+qm16hXvJ94MnERdhZ5f9TYYr8vj4+5iBymbKqSo3V mZ/aopnVgu8fFxYdfv/JhyTxrYcqIfnI28GMZnwBz+SAiV+TnbxHvYtPAlsu0YR8hg3oqmhovTY 0qJfXgSgNBkok85YRmVXSzFMpnNKoruyzJbduDwygoeqEvxaJr4rfl8vCCFusf2Nm3KE0ivRhMZ zaDeUJNUwy5PbYsEg4g== X-Proofpoint-GUID: nZYWITezJsCHsJPISpbHe3NT6ay8_0rV 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_01,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 phishscore=0 bulkscore=0 spamscore=0 impostorscore=0 suspectscore=0 adultscore=0 malwarescore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602270057 The HFI command/response ops were previously initialized in probe() but, we don't have firmware loaded at probe time. Since HFI is tightly coupled to firmware, initialize the HFI ops after firmware has been successfully loaded and booted. Reviewed-by: Bryan O'Donoghue Signed-off-by: Dikshita Agarwal --- drivers/media/platform/qcom/iris/iris_core.c | 2 ++ drivers/media/platform/qcom/iris/iris_hfi_common.c | 6 ++++++ drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + drivers/media/platform/qcom/iris/iris_probe.c | 2 -- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_core.c b/drivers/media/p= latform/qcom/iris/iris_core.c index dbaac01eb15a0e622e85635fddd29c1f7fc18662..259a1c4597a1ce76a4e0f254904= b135c8fef549e 100644 --- a/drivers/media/platform/qcom/iris/iris_core.c +++ b/drivers/media/platform/qcom/iris/iris_core.c @@ -79,6 +79,8 @@ int iris_core_init(struct iris_core *core) if (ret) goto error_unload_fw; =20 + iris_init_hfi_ops(core); + ret =3D iris_hfi_core_init(core); if (ret) goto error_unload_fw; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_common.c b/drivers/m= edia/platform/qcom/iris/iris_hfi_common.c index 621c66593d88d47ef3438c98a07cb29421c4e375..db48dfcc96b8d923ec49bb4b27e= 7a0ddaac263e8 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_common.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_common.c @@ -74,6 +74,12 @@ u32 iris_hfi_get_v4l2_matrix_coefficients(u32 hfi_coeffi= cients) } } =20 +void iris_init_hfi_ops(struct iris_core *core) +{ + core->iris_platform_data->init_hfi_command_ops(core); + core->iris_platform_data->init_hfi_response_ops(core); +} + int iris_hfi_core_init(struct iris_core *core) { const struct iris_hfi_command_ops *hfi_ops =3D core->hfi_ops; diff --git a/drivers/media/platform/qcom/iris/iris_hfi_common.h b/drivers/m= edia/platform/qcom/iris/iris_hfi_common.h index 3edb5ae582b49bea2e2408c4a5cfc0a742adc05f..498a08314cdeb65b4b621e2200a= ae8685f4a025b 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_common.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_common.h @@ -149,6 +149,7 @@ struct hfi_subscription_params { u32 iris_hfi_get_v4l2_color_primaries(u32 hfi_primaries); u32 iris_hfi_get_v4l2_transfer_char(u32 hfi_characterstics); u32 iris_hfi_get_v4l2_matrix_coefficients(u32 hfi_coefficients); +void iris_init_hfi_ops(struct iris_core *core); int iris_hfi_core_init(struct iris_core *core); int iris_hfi_pm_suspend(struct iris_core *core); int iris_hfi_pm_resume(struct iris_core *core); diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/= platform/qcom/iris/iris_probe.c index ddaacda523ecb9990af0dd0640196223fbcc2cab..22c7b3410710328b900fc49459c= d399aa0e89b02 100644 --- a/drivers/media/platform/qcom/iris/iris_probe.c +++ b/drivers/media/platform/qcom/iris/iris_probe.c @@ -252,8 +252,6 @@ static int iris_probe(struct platform_device *pdev) disable_irq_nosync(core->irq); =20 iris_init_ops(core); - core->iris_platform_data->init_hfi_command_ops(core); - core->iris_platform_data->init_hfi_response_ops(core); =20 ret =3D iris_init_resources(core); if (ret) --=20 2.34.1 From nobody Thu Apr 9 12:09:29 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 B8134389E04 for ; Fri, 27 Feb 2026 06:51:20 +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=1772175083; cv=none; b=MXBZpSmLWge+KJXTLrxGiD14iNNVq2s1FacsEwB3BSY9wpxjGw362lrdpXXMeYrwpYICzIMB/9EAWOkh7l+OhhTVyvaIszEqqJH534TFCLR8JxXbTAwhp/QLmIpXBa4/sQ7cJUGU+acCeiaYe8nRCTGRw9y2hbfWJPLfx5K0FIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772175083; c=relaxed/simple; bh=8VozCV/2rqeb8HwSXjLaGMIBVeiwoVjkWPiyO4/S4bY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dET6S+AskaJTBdUv7vHn4aPjmdFnvy8NJJxNsYlHiIDx/lrsbI9e668bxVLOPnkTuXqlbz2yIe00+ct1iimbw0Emam1OBuFRm/YgK2fvClbcgsusFYFoh8NY1i+FblPOwL5mKizXoZdmQuCQXEsCMppReyKug9Z228HmlVzogVw= 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=Ga1a0gqa; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZGJEIvdQ; 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="Ga1a0gqa"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZGJEIvdQ" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61R2KEHO2982601 for ; Fri, 27 Feb 2026 06:51: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= +/y/jEWO9QGQ6VPkqMP+OneRNyGFI7YPepN29QNGjaw=; b=Ga1a0gqa7YPTvIFY si2PVFJPjHMv8ocrAJxSEn8pEJ0z9/cjgN5iaMGm+dD8uIP4rWdEJBac7QkS57Vq F1qXNdy3ZfaBYh4dc9+VuNmp+7q+pumy0pfT2IlQ0q6CbimByn6XA9X8KBVRDAKo bBCBrOU3xdGWWgIngSunTI/fDVxTcY0wPG7KsBYuOrUtNmQBnRE/NiuC1Dokc8AB /KmJdGexzAg5SrSYag9B/4Pbit1nx8M3o2nQ7PzXkgNuIJYGRrz+ey7tDtnKgh3N SipRvyklm6R6vQjd4axSuSg9IDsG8DiIDUbOdxJixmXGx1TQnBPoje23GBxL3Ge2 j5iIzA== Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cjk2v433x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 27 Feb 2026 06:51:20 +0000 (GMT) Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-3595485abbbso1127967a91.2 for ; Thu, 26 Feb 2026 22:51:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772175079; x=1772779879; 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=+/y/jEWO9QGQ6VPkqMP+OneRNyGFI7YPepN29QNGjaw=; b=ZGJEIvdQ0wWwiQZAT8vuKNnA3ED/o0SaJyPEfFU8aWkkaGtaGc5252lxgryulC/ZYo 1A8rx1iYY7xAVFhyBMPGwO9cVT3DE5HxXZj9qEY8Zcoy0PJxJLCGqZZDwzHbHE/STfLs 6k/I+dEmmm1AYQxbwk/fhHK0PmojgJhT32MMvJAIxo+E5CDO7hrPtNa2drwzvEJ8vzVP rJTaGHisiULFhNkkpidWDKs0i/dT0zDpWJfHnbwS87HYpa7Flo++ivBbsRP9bLxY8WFN g0vKwa6wLeH5x8akfQnwgLDj2OOLe76tnm5GaJwm0ANjLw7ZI3wgCas63NuEu1Hj5ovQ JP/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772175079; x=1772779879; 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=+/y/jEWO9QGQ6VPkqMP+OneRNyGFI7YPepN29QNGjaw=; b=EliKZ6bvqV3Gvv9wSTymZ+fbLvC5lZwAVNkZ7TmT4gdsOvC1ZHuzHIxy0d5KAOQLhb EOVUcPtEpJHkl1RgwOf41GCK5IRB0pV5uNd3jnDOnwAdEBRco90ouTUh4t/UPResJ1sl wtFwkgXkv3XQejAUe2iAyWAEuBMnMJajXxz1tpHOMYt57R+8NMcuKmyl2KFch3zVd9Rm Fj+OZVR9XgbxSdZmdmD0hU2PfNMwH5FiBPDzAPUV1BSmODwncoNdBw1oRvqcF83d3cLa htjCOe7DXWi0Pnk8XM3OV/Q7XFDap87JJ4zEalr6ss7JBXb81RfndDxaD+RW/QbwHRFE AyxA== X-Forwarded-Encrypted: i=1; AJvYcCUHksp2XT+bGzflsquoscJNb8MbfzjWkQLbjmfLF4VFw0Dd4S6bo24SYzc+H2i26BEycDKqMy1SdAPVogo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8MeouDvbWGgLnnhQMztoYQWbTeqCZIsU8mFEDpbIND2NMcHmX PO9nUqgBvfYStFgbFJMqBXTPBjufLqFQWwTr3tuwzKSqHVKm+e/5ns7r5ejzdAglyDHEUejIHSf 3thx1r/nr1azdlgN1B+DEuaYw2vxhQCwGhut1g+2BBJDPS62S1apVhM+/Nss48wxijxM= X-Gm-Gg: ATEYQzy2eGc7lagp/k2ClYZLQsDGmC5eIiEfoL2JPNJJzPUdk0JXnWoiVau3/6IKxVd Gbhm9hPAionh+gFO3LBGW1N3/pm9oza/X/0KiYHNmwWPKtiVstHOvWTbQiAQGdmxENXlVufTZnM O1yu0FVU0j0HUbNxO4PWp5wyu6nL54YFBUqZWvGEcVIV6xIg3ae/q+O6W15w80qr/XU8HKOEBtQ YzaSTuMq+xbiQUpC7fpiGmu7UlkJtcQ4yAJMQ52odgv6cPbcEuOGPAwHpq1bsIQMOciPyHXVVC9 ehrEdAgKHztlfTGD42IYRJDhaHNd3+V+TrpeWqZX0kWCMyWY7ZqCceys/wEw97/Wo6Zx4h37nTS IfdJsvf7FcGg+RZtJ36nWQVOd1K1NsodcQqtlLaUHZjBK49fcbd3yEPdwbZU= X-Received: by 2002:a05:6a20:6a21:b0:366:14b2:30f with SMTP id adf61e73a8af0-395c3b51f2amr1806981637.66.1772175079255; Thu, 26 Feb 2026 22:51:19 -0800 (PST) X-Received: by 2002:a05:6a20:6a21:b0:366:14b2:30f with SMTP id adf61e73a8af0-395c3b51f2amr1806948637.66.1772175078697; Thu, 26 Feb 2026 22:51:18 -0800 (PST) Received: from hu-dikshita-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c70fa5ea0dcsm3455880a12.3.2026.02.26.22.51.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Feb 2026 22:51:18 -0800 (PST) From: Dikshita Agarwal Date: Fri, 27 Feb 2026 12:21:03 +0530 Subject: [PATCH v2 3/3] media: iris: Add support for Gen2 firmware detection and loading on SC7280 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-iris_sc7280_gen2_support-v2-3-7e5b13d26542@oss.qualcomm.com> References: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> In-Reply-To: <20260227-iris_sc7280_gen2_support-v2-0-7e5b13d26542@oss.qualcomm.com> To: Vikash Garodia , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Hans Verkuil , Vishnu Reddy Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Dikshita Agarwal X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772175063; l=13505; i=dikshita.agarwal@oss.qualcomm.com; s=20240917; h=from:subject:message-id; bh=8VozCV/2rqeb8HwSXjLaGMIBVeiwoVjkWPiyO4/S4bY=; b=EIsRgrboJqBUjtXyHYmcfrf96pJ+3eJWauzNpXzdfzut6AuDGa4GvTCigjkaxrcsjtk1DmSTo Uv4G8HSXtiXB7H3V0BBG1tKY1JetpsoUlbM26TO6c/NiwiiHzOo9wwF X-Developer-Key: i=dikshita.agarwal@oss.qualcomm.com; a=ed25519; pk=EEvKY6Ar1OI5SWf44FJ1Ebo1KuQEVbbf5UNPO+UHVhM= X-Proofpoint-ORIG-GUID: Cl8GO6TypObJefH1THfm5jILcZ2B-bWM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjI3MDA1NyBTYWx0ZWRfX+NOnyClYSLu1 5rcsn6vlTnQww5NEyGtJp3UPc2s2L+YcLLYlLyxksjB60+rFrhpia7RKZRaRV1UuZBaiT7lr7+f j3LzFsE+y4mk4F+1iPZePJEgKTaggqaB+TsAxeaAOyO8boa2/irazzqkWW4ulKeoVGrUS0ovE2w aITJDu6uU4tyo3n1CD97Km43LKtbUE7KULZ7df8wAoqCDclz67Nc3IuuQrd/rgBe0gh1IRWoi6L uJwd/1yIz81TFt7eqGa5ulGd980qFKnCdD85WY1LAYS4upQF8GhMWo+eXNcwVJmcBbZdfkq8R6O fn6y1LpLcPl1A2PmcDvnYorhSU5qy/rHvDgT8K0gYzEpfxuZzp455uOctE/CclQwVQO60XVHwDK krc5BUHs4CgtLxNMCPCAG0gNuOJos+PV+DWpnqMNu4WmCUzDl3xMryojv8o6Zv+jXVhO5ybECO2 GtEQhjbiEbmEVOc8eEg== X-Authority-Analysis: v=2.4 cv=PO8COPqC c=1 sm=1 tr=0 ts=69a13ee8 cx=c_pps a=RP+M6JBNLl+fLTcSJhASfg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=vAhLNi6rj8_hoSnI:21 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=IrGTtLzU1_bVHTQOxnMA:9 a=QEXdDO2ut3YA:10 a=iS9zxrgQBfv6-_F4QbHw:22 X-Proofpoint-GUID: Cl8GO6TypObJefH1THfm5jILcZ2B-bWM 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_01,2026-02-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 spamscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602270057 SC7280 supports both Gen1 and Gen2 HFI firmware. To support both dynamically, update the firmware loading mechanism to prioritize Gen2 availability and detect the loaded firmware version at runtime. The firmware loading logic is updated with the following priority: 1. Device Tree (`firmware-name`): If specified, load unconditionally. 2. Gen2 Autodetect (SC7280 only): If no DT property exists, attempt to load the specific Gen2 firmware image (`vpu20_p1_gen2_s6.mbn`). 3. Default Fallback: If Gen2 loading fails or is not applicable, use the default firmware name defined in the default platform data. Additionally, introduce `iris_update_platform_data` to inspect the loaded firmware memory before authentication. This function scans for `QC_IMAGE_VERSION_STRING`. If the version string starts with "vfw" or matches "video-firmware.N.M" (where N >=3D 2), it identifies the firmware as Gen2. If Gen2 firmware is detected on SC7280, the driver switches the internal platform data pointer to the Gen2 configuration. Signed-off-by: Dikshita Agarwal --- drivers/media/platform/qcom/iris/iris_firmware.c | 70 +++++++++++++++++- .../platform/qcom/iris/iris_platform_common.h | 1 + .../media/platform/qcom/iris/iris_platform_gen1.c | 4 +- .../media/platform/qcom/iris/iris_platform_gen2.c | 83 ++++++++++++++++++= ++++ .../platform/qcom/iris/iris_platform_sc7280.h | 15 ++++ drivers/media/platform/qcom/iris/iris_probe.c | 3 - drivers/media/platform/qcom/iris/iris_vidc.c | 3 + 7 files changed, 171 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_firmware.c b/drivers/med= ia/platform/qcom/iris/iris_firmware.c index 5f408024e967fd21ade66cc3fa377d8507f9002e..f6ee7f58d4ce215ad9f7fb5fdca= dec17f99c8848 100644 --- a/drivers/media/platform/qcom/iris/iris_firmware.c +++ b/drivers/media/platform/qcom/iris/iris_firmware.c @@ -14,6 +14,53 @@ =20 #define MAX_FIRMWARE_NAME_SIZE 128 =20 +static void iris_update_platform_data(struct iris_core *core) +{ + const char *marker =3D "QC_IMAGE_VERSION_STRING=3D"; + struct device_node *node =3D core->dev->of_node; + const char *found =3D NULL; + int major =3D 0, minor =3D 0; + char version_buf[64]; + struct resource res; + void *mem_virt; + size_t i; + + if (!of_device_is_compatible(node, "qcom,sc7280-venus")) + return; + + if (of_reserved_mem_region_to_resource(node, 0, &res)) { + dev_err(core->dev, "Failed to get reserved memory for version check\n"); + return; + } + + mem_virt =3D memremap(res.start, resource_size(&res), MEMREMAP_WC); + if (!mem_virt) { + dev_err(core->dev, "Failed to remap memory for version check\n"); + return; + } + + for (i =3D 0; i < resource_size(&res) - strlen(marker); i++) { + if (memcmp(mem_virt + i, marker, strlen(marker)) =3D=3D 0) { + found =3D (const char *)(mem_virt + i + strlen(marker)); + break; + } + } + + if (found) { + strscpy(version_buf, found, sizeof(version_buf)); + + /* Check for gen2 version string: "vfw..." OR "video-firmware.N..." (N>= =3D2) */ + if (strncmp(version_buf, "vfw", 3) =3D=3D 0 || + (sscanf(version_buf, "video-firmware.%d.%d", &major, &minor) =3D=3D = 2 && + major >=3D 2)) { + dev_info(core->dev, "Gen2 FW Detected: %s\n", version_buf); + core->iris_platform_data =3D &sc7280_gen2_data; + } + } + + memunmap(mem_virt); +} + static int iris_load_fw_to_memory(struct iris_core *core, const char *fw_n= ame) { u32 pas_id =3D core->iris_platform_data->pas_id; @@ -64,21 +111,38 @@ static int iris_load_fw_to_memory(struct iris_core *co= re, const char *fw_name) =20 int iris_fw_load(struct iris_core *core) { + struct device_node *node =3D core->dev->of_node; const struct tz_cp_config *cp_config; const char *fwpath =3D NULL; int i, ret; =20 ret =3D of_property_read_string_index(core->dev->of_node, "firmware-name"= , 0, &fwpath); - if (ret) - fwpath =3D core->iris_platform_data->fwname; + if (!ret) { + ret =3D iris_load_fw_to_memory(core, fwpath); + } else { + bool fw_loaded =3D false; + + if (of_device_is_compatible(node, "qcom,sc7280-venus")) { + ret =3D iris_load_fw_to_memory(core, "qcom/vpu/vpu20_p1_gen2_s6.mbn"); + if (!ret) + fw_loaded =3D true; + } + + if (!fw_loaded) { + fwpath =3D core->iris_platform_data->fwname; + dev_dbg(core->dev, "loading default fw: %s\n", fwpath); + ret =3D iris_load_fw_to_memory(core, fwpath); + } + } =20 - ret =3D iris_load_fw_to_memory(core, fwpath); if (ret) { dev_err(core->dev, "firmware download failed\n"); return -ENOMEM; } =20 + iris_update_platform_data(core); + ret =3D qcom_scm_pas_auth_and_reset(core->iris_platform_data->pas_id); if (ret) { dev_err(core->dev, "auth and reset failed: %d\n", ret); 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..f1bbbe043e3a3ccc5eebf670911= 62678eb83bf45 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -43,6 +43,7 @@ enum pipe_type { =20 extern const struct iris_platform_data qcs8300_data; extern const struct iris_platform_data sc7280_data; +extern const struct iris_platform_data sc7280_gen2_data; extern const struct iris_platform_data sm8250_data; extern const struct iris_platform_data sm8550_data; extern const struct iris_platform_data sm8650_data; diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen1.c b/driver= s/media/platform/qcom/iris/iris_platform_gen1.c index df8e6bf9430ed2a070e092edae9ef998d092cb5e..6dbdd0833dcdc7dfac6d7b35f99= 837c883e188e7 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c @@ -414,8 +414,8 @@ const struct iris_platform_data sc7280_data =3D { .dma_mask =3D 0xe0000000 - 1, .fwname =3D "qcom/vpu/vpu20_p1.mbn", .pas_id =3D IRIS_PAS_ID, - .inst_iris_fmts =3D platform_fmts_sm8250_dec, - .inst_iris_fmts_size =3D ARRAY_SIZE(platform_fmts_sm8250_dec), + .inst_iris_fmts =3D platform_fmts_sc7280_dec, + .inst_iris_fmts_size =3D ARRAY_SIZE(platform_fmts_sc7280_dec), .inst_caps =3D &platform_inst_cap_sm8250, .inst_fw_caps_dec =3D inst_fw_cap_sm8250_dec, .inst_fw_caps_dec_size =3D ARRAY_SIZE(inst_fw_cap_sm8250_dec), diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index 5da90d47f9c6eab4a7e6b17841fdc0e599397bf7..5f3be22a003fe5d80b683b43a1b= 2386497785fb1 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -15,6 +15,7 @@ #include "iris_platform_qcs8300.h" #include "iris_platform_sm8650.h" #include "iris_platform_sm8750.h" +#include "iris_platform_sc7280.h" =20 #define VIDEO_ARCH_LX 1 #define BITRATE_MAX 245000000 @@ -1317,3 +1318,85 @@ const struct iris_platform_data qcs8300_data =3D { .enc_op_int_buf_tbl =3D sm8550_enc_op_int_buf_tbl, .enc_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), }; + +const struct iris_platform_data sc7280_gen2_data =3D { + .get_instance =3D iris_hfi_gen2_get_instance, + .init_hfi_command_ops =3D iris_hfi_gen2_command_ops_init, + .init_hfi_response_ops =3D iris_hfi_gen2_response_ops_init, + /* Gen2 FW for SC7280 requires bigger size for line buffer for encoder */ + .get_vpu_buffer_size =3D iris_vpu33_buf_size, + .vpu_ops =3D &iris_vpu2_ops, + .set_preset_registers =3D iris_set_sm8550_preset_registers, + .icc_tbl =3D sm8550_icc_table, + .icc_tbl_size =3D ARRAY_SIZE(sm8550_icc_table), + .bw_tbl_dec =3D sc7280_bw_table_dec, + .bw_tbl_dec_size =3D ARRAY_SIZE(sc7280_bw_table_dec), + .pmdomain_tbl =3D sm8550_pmdomain_table, + .pmdomain_tbl_size =3D ARRAY_SIZE(sm8550_pmdomain_table), + .opp_pd_tbl =3D sc7280_opp_pd_table, + .opp_pd_tbl_size =3D ARRAY_SIZE(sc7280_opp_pd_table), + .clk_tbl =3D sc7280_clk_table, + .clk_tbl_size =3D ARRAY_SIZE(sc7280_clk_table), + .opp_clk_tbl =3D sc7280_opp_clk_table, + /* Upper bound of DMA address range */ + .dma_mask =3D 0xe0000000 - 1, + .fwname =3D "qcom/vpu/vpu20_p1_gen2_s6.mbn", + .pas_id =3D IRIS_PAS_ID, + .inst_iris_fmts =3D platform_fmts_sc7280_dec, + .inst_iris_fmts_size =3D ARRAY_SIZE(platform_fmts_sc7280_dec), + .inst_caps =3D &platform_inst_cap_sm8550, + .inst_fw_caps_dec =3D inst_fw_cap_sm8550_dec, + .inst_fw_caps_dec_size =3D ARRAY_SIZE(inst_fw_cap_sm8550_dec), + .inst_fw_caps_enc =3D inst_fw_cap_sm8550_enc, + .inst_fw_caps_enc_size =3D ARRAY_SIZE(inst_fw_cap_sm8550_enc), + .tz_cp_config_data =3D tz_cp_config_sm8550, + .tz_cp_config_data_size =3D ARRAY_SIZE(tz_cp_config_sm8550), + .hw_response_timeout =3D HW_RESPONSE_TIMEOUT_VALUE, + .ubwc_config =3D &ubwc_config_sm8550, + .core_arch =3D VIDEO_ARCH_LX, + .num_vpp_pipe =3D 1, + .no_aon =3D true, + .max_session_count =3D 16, + .max_core_mbpf =3D 4096 * 2176 / 256 * 2 + 1920 * 1088 / 256, + /* max spec for SC7280 is 4096x2176@60fps */ + .max_core_mbps =3D 4096 * 2176 / 256 * 60, + .dec_input_config_params_default =3D + sm8550_vdec_input_config_params_default, + .dec_input_config_params_default_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_params_default), + .dec_input_config_params_hevc =3D + sm8550_vdec_input_config_param_hevc, + .dec_input_config_params_hevc_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), + .dec_input_config_params_vp9 =3D + sm8550_vdec_input_config_param_vp9, + .dec_input_config_params_vp9_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), + .enc_input_config_params =3D sm8550_venc_input_config_params, + .enc_input_config_params_size =3D + ARRAY_SIZE(sm8550_venc_input_config_params), + .dec_output_config_params =3D sm8550_vdec_output_config_params, + .dec_output_config_params_size =3D ARRAY_SIZE(sm8550_vdec_output_config_p= arams), + .enc_output_config_params =3D sm8550_venc_output_config_params, + .enc_output_config_params_size =3D ARRAY_SIZE(sm8550_venc_output_config_p= arams), + + .dec_ip_int_buf_tbl =3D sm8550_dec_ip_int_buf_tbl, + .dec_ip_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), + .dec_op_int_buf_tbl =3D sm8550_dec_op_int_buf_tbl, + .dec_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), + + .enc_op_int_buf_tbl =3D sm8550_enc_op_int_buf_tbl, + .enc_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_enc_op_int_buf_tbl), + + .dec_input_prop =3D sm8550_vdec_subscribe_input_properties, + .dec_input_prop_size =3D ARRAY_SIZE(sm8550_vdec_subscribe_input_propertie= s), + .dec_output_prop_avc =3D sm8550_vdec_subscribe_output_properties_avc, + .dec_output_prop_avc_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), + .dec_output_prop_hevc =3D sm8550_vdec_subscribe_output_properties_hevc, + .dec_output_prop_hevc_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), + .dec_output_prop_vp9 =3D sm8550_vdec_subscribe_output_properties_vp9, + .dec_output_prop_vp9_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), +}; diff --git a/drivers/media/platform/qcom/iris/iris_platform_sc7280.h b/driv= ers/media/platform/qcom/iris/iris_platform_sc7280.h index 0ec8f334df670c3c1548a5ee3b8907b333e34db3..6e05f2542a5457bd0b3b6acced3= bd54d166b2023 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sc7280.h +++ b/drivers/media/platform/qcom/iris/iris_platform_sc7280.h @@ -6,6 +6,21 @@ #ifndef __IRIS_PLATFORM_SC7280_H__ #define __IRIS_PLATFORM_SC7280_H__ =20 +static struct iris_fmt platform_fmts_sc7280_dec[] =3D { + [IRIS_FMT_H264] =3D { + .pixfmt =3D V4L2_PIX_FMT_H264, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, + [IRIS_FMT_HEVC] =3D { + .pixfmt =3D V4L2_PIX_FMT_HEVC, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, + [IRIS_FMT_VP9] =3D { + .pixfmt =3D V4L2_PIX_FMT_VP9, + .type =3D V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, + }, +}; + static const struct bw_info sc7280_bw_table_dec[] =3D { { ((3840 * 2160) / 256) * 60, 1896000, }, { ((3840 * 2160) / 256) * 30, 968000, }, diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/= platform/qcom/iris/iris_probe.c index 22c7b3410710328b900fc49459cd399aa0e89b02..1f44d3ea337df63fbf5317b9b99= 139a0867267c3 100644 --- a/drivers/media/platform/qcom/iris/iris_probe.c +++ b/drivers/media/platform/qcom/iris/iris_probe.c @@ -12,7 +12,6 @@ #include =20 #include "iris_core.h" -#include "iris_ctrls.h" #include "iris_vidc.h" =20 static int iris_init_icc(struct iris_core *core) @@ -257,8 +256,6 @@ static int iris_probe(struct platform_device *pdev) if (ret) return ret; =20 - iris_session_init_caps(core); - ret =3D v4l2_device_register(dev, &core->v4l2_dev); if (ret) return ret; diff --git a/drivers/media/platform/qcom/iris/iris_vidc.c b/drivers/media/p= latform/qcom/iris/iris_vidc.c index bd38d84c9cc79d15585ed5dd5f905a37521cb6dc..0727d5d19cb9b7ed1f72ab840ae= 5dfda0162e23d 100644 --- a/drivers/media/platform/qcom/iris/iris_vidc.c +++ b/drivers/media/platform/qcom/iris/iris_vidc.c @@ -9,6 +9,7 @@ #include #include =20 +#include "iris_ctrls.h" #include "iris_vidc.h" #include "iris_instance.h" #include "iris_vdec.h" @@ -196,6 +197,8 @@ int iris_open(struct file *filp) goto fail_m2m_release; } =20 + iris_session_init_caps(core); + if (inst->domain =3D=3D DECODER) ret =3D iris_vdec_inst_init(inst); else if (inst->domain =3D=3D ENCODER) --=20 2.34.1