From nobody Thu Apr 9 13:33:28 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