From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D18C638839C for ; Tue, 3 Mar 2026 08:41:17 +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=1772527280; cv=none; b=tuQHwgr6dzAXRSKox38cZ2ew6JuDHZn1GqPg+jAMrhsyVYIJTzl7uVkPXvMTHCTPy3hwkcc7dmLlomNHZ1KWeVHaXs+6hK7xFPcQUd8/Hy9DRFYJWrempa9d8XucZyahFUX/6QVG4jY5GWESCmnFwm+pgXTp+S9wR7R+fKJScOw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772527280; c=relaxed/simple; bh=SdU36b6TYV79uk+gjgvtozaaDb08vZT9Ub4z3hYO0VA=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=MAS7lXhGb0P9yWWY/j/csCUFlcVRsk2anKH5U3N5dizgRdcz1kmq5UyRAP4RVbTpCxN3R3We7xj92t2gqm3MMnmvHZCTTPYOFDXcNHsRfx6fMN/txEpNJwan4tAFqMPa5jWtUp5nY3RIgl96Wv2VlFk46KGRPrlwRQdDYYWU2yA= 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=lPu0IvLO; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=fE7/QIUH; 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="lPu0IvLO"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fE7/QIUH" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6237xALu2855580 for ; Tue, 3 Mar 2026 08:41:17 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= n3P/v9Y/3o9NF1GSXcnB18lWN7UL+yS3drdaJoZ7Zyg=; b=lPu0IvLOPOGEumFw NtZX6jW8VhXAyjfau3IS3LNUEW7d7EWpEsdWvSM3il4/BOPUe3Im5W7DwNeweikt oLmkaboeM0PZu1PZZl2uH7vn262sJSDP02HGy+g3mAE+kN0H6qwBTIsUiBTGIcjt XlDYimgHcj9zT+lmR0gxwwX+cF5ENjStbMmsdcLKcRew8mWTqriIOtyLUdDeeLtF nb6qCOHWMMeHBvrP3QsxpktB/b+lAKS13XYsb6XMDPI4l/ZlUHQ5pYWJ3D8rcEOi XK2Lp6Avs+V+X9v1PgNIYqVv7fQsdFiHTp5YLNeRYVXz5DixjMWKTNEi8e3r6Grk ZxfxbQ== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cnuqu058u-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 03 Mar 2026 08:41:16 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-b6097ca315bso26131139a12.3 for ; Tue, 03 Mar 2026 00:41:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772527276; x=1773132076; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=n3P/v9Y/3o9NF1GSXcnB18lWN7UL+yS3drdaJoZ7Zyg=; b=fE7/QIUHs7edvxvjpqFT74zHbajbsJE/HGWi3TDwY1nTAfIM/AFONu8AWEd2nkJNKA uTcgcjYgzaDr+jiLMuJWfw3EuxUudO3oCueyumYsEFSMNwueHUSDkTd1y3JvMS65BAuC TiUhanU6lIMXYWeEE0ocyhm/zaEt7FTY4tWPAhr4v/+UwH4HrjKeowPanydlN0rbrHX2 21+EK7GUVeBrIkh1XW1hQqnJ2N39oQQ2xMVCnX+kbegG5mAPW6CgyhwT5AO2gXxkCK32 zBGYCcVXa/Nwa7c6EEUSxMX7akAfRy4CuyN/XdS+cG9KDkYckzyqLYhE1jCvASDF8pP3 h2fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772527276; x=1773132076; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=n3P/v9Y/3o9NF1GSXcnB18lWN7UL+yS3drdaJoZ7Zyg=; b=tiPn11DI6Suzs4xW4cs/cLhETgDK1a+bmH6y78f+s0Q+mNitM2NRQHKXjWt2zYIhMB SizFKtwxaWInkE5aRmJRx36dZPYT2l5oyMpC/EJ5wOZHs5ls6VS0b+SwjCiDpsRu1MjT vUCuSMImS2iUvauiAStD2pzoC4gApE6Lor5U+ZKoG0DHTnnHvuImjJ21sbB0YGNmIy/9 hT9b93tAbQYFyS6N46sk0iJ3Re0+EdOCHsW+maoYJQL5+T5J3EmF4ULNXGBLsRzpQifb JvLQG8jAQOw2iu+NDLfLaFWVif932D4WnPKWoe51NgHOtkWE5X4h3QI+vTD/KTEg3WcK twHw== X-Forwarded-Encrypted: i=1; AJvYcCXJWtGY0rNxN7d+04iY+6UpY0OSJInjtaJMPcUjcK11L4t97eG/fAAzfzZNS1HXCfLs6UHAzSPniv2kTjs=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2NX7jfa6dQnw89Gj2kEuN1CpvGlub1fEtbp0GpW5fKonJRlhF 7BoyoSZxgnhHEQg8N4czg7boieJM8FNV9o2NRzGfcBHzjfdl+cirFq8ALShvPD7F+K3ME2KJHBw aPlcXFiiSjsqgPiA7eKj0bUGD6u8fA3ocylU5LD/WzwV3qQYZFmfDFZKi6/e85XSVnIQ= X-Gm-Gg: ATEYQzw4EnW/UNXuWMFYK0MgDA5f62LervWvYQ2YYk4EOHhU/jp+Fjugh3ZArTLGmIY oQtvawNILP16DYNm1YM4UFV7rojk6lZdzT9Enu+SNVt9K+1wi4dZqrj0huT7KC2Dd61po55UuHm 4RRCGqK310hxfYO/3si6qdUQJw4nBTDOhWRwBrBLRrQvh4UsxKYCCt1z7ogzx1vddmzE7OySbDn XDPsNPqx2tylipbaNWbf3yIhQNSiN3hOXKwKcTRn1TJ8H8q25mdOChby0FcSrynF4XuIlY0VGuY KBg6RohesKusjZZnmAo61gK+TnImw3r46FVCsmm44w7cSLffC0OcermjoVx5lbH+k7x6g19gFlm Mt1E81+KLrPZGIPxiHzi7aQjpXkH1GoTSyduDXcUyu9D81ITRbpatDkIREzCBGMbHsXNenGM56T vOmVwozrzB380+ X-Received: by 2002:a05:6a21:b82:b0:35f:5fc4:d885 with SMTP id adf61e73a8af0-395c3a1d040mr12820064637.9.1772527275740; Tue, 03 Mar 2026 00:41:15 -0800 (PST) X-Received: by 2002:a05:6a21:b82:b0:35f:5fc4:d885 with SMTP id adf61e73a8af0-395c3a1d040mr12820039637.9.1772527275070; Tue, 03 Mar 2026 00:41:15 -0800 (PST) Received: from ?IPV6:2401:4900:1c66:bc62:9072:7b6b:889e:887d? ([2401:4900:1c66:bc62:9072:7b6b:889e:887d]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c70fa620faesm13260917a12.10.2026.03.03.00.41.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Mar 2026 00:41:14 -0800 (PST) Message-ID: Date: Tue, 3 Mar 2026 14:11:06 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 11/11] soc: qcom: ice: Add explicit power-domain and clock voting calls for ICE To: Manivannan Sadhasivam Cc: Herbert Xu , "David S. Miller" , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Bjorn Andersson , Konrad Dybcio , Abel Vesa , cros-qcom-dts-watchers@chromium.org, Brian Masney , Neeraj Soni , Gaurav Kashyap , linux-arm-msm@vger.kernel.org, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260123-qcom_ice_power_and_clk_vote-v1-0-e9059776f85c@qti.qualcomm.com> <20260123-qcom_ice_power_and_clk_vote-v1-11-e9059776f85c@qti.qualcomm.com> Content-Language: en-US From: Harshal Dev In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Authority-Analysis: v=2.4 cv=M85A6iws c=1 sm=1 tr=0 ts=69a69eac cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=dxsIoiN5mY1GeC2t4AAA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-GUID: RmFvB1_BssOKxcmZcqvhAj0Hp_J5UXzF X-Proofpoint-ORIG-GUID: RmFvB1_BssOKxcmZcqvhAj0Hp_J5UXzF X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzAzMDA2MyBTYWx0ZWRfX5nYfy1L3+3Sq HXcVKnKS3S623H+95j6oJNu5tRb1Ubcv1vIhIJ3k1m5EfrGF4K2kdqui9CM0mf699bryJsX+Kvt sdoaUjEerSrBz+gdGD4/Sr0JZ5UM1e7sMRv27fPo+7chS2Y7vSZ5HKykE7TBz5G5ek+PpLIicHg pnHShN498TwJ5DnnXEzHs+rc062xyUi+3bXOmAF2W8B4/d57W3XlVJHSOFUHAYRJ+L3TpqajZuj YjXUGPzENBL6SmRgTxo+gMbKD8tU1Hk8mUSQnNcw0Yvr+IskuaoA6T1+T1z5AIxeVjuO6HWS6Dj q64KoRrgg6qhwR+wdxR/JQa7xgZC6aKnWgdqLRit8UfYwVcJh5JdtIA2QEceA3tHxwxLtVY7nm8 u9ZRrPBfoV04YUZ7eyAtLCQ3ys0HOvVv6E7S6GF2sA71pj8nwXeeuwaTeta2MXrP0yGy85AT5wY 0mQDnO/M4mYSNozsPRA== 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-03-02_05,2026-03-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 suspectscore=0 spamscore=0 malwarescore=0 adultscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603030063 Hi Manivannan, On 2/20/2026 8:14 PM, Manivannan Sadhasivam wrote: > On Fri, Jan 23, 2026 at 12:41:35PM +0530, Harshal Dev wrote: >> Since Qualcomm inline-crypto engine (ICE) is now a dedicated driver >> de-coupled from the QCOM UFS driver, it should explicitly vote for it's >> needed resources during probe, specifically the UFS_PHY_GDSC power-domain >> and the 'core' and 'iface' clocks. > > You don't need to vote for a single power domain since genpd will do that for > you before the driver probes. > Unfortunately, without enabling the power domain during probe, I am seeing occasional clock stuck messages on LeMans RB8. Am I missing something? Could you point me to any docs with more information on the the genpd framework? Logs for reference: [ 6.195019] gcc_ufs_phy_ice_core_clk status stuck at 'off' [ 6.195031] WARNING: CPU: 5 PID: 208 at drivers/clk/qcom/clk-branch.c:87 clk_branch_toggle+0x174/0x18c [...] [ 6.248412] pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 6.248415] pc : clk_branch_toggle+0x174/0x18c [ 6.248417] lr : clk_branch_toggle+0x174/0x18c [ 6.248418] sp : ffff80008217b770 [ 6.248419] x29: ffff80008217b780 x28: ffff80008217bbb0 x27: ffffadf880a5f07c [ 6.248422] x26: ffffadf880a5c1d8 x25: 0000000000000001 x24: 0000000000000001 [ 6.248424] x23: ffffadf8a0d1e740 x22: 0000000000000001 x21: ffffadf8a1d06160 [ 6.248426] x20: ffffadf89f86e5a8 x19: 0000000000000000 x18: fffffffffffe9050 [ 6.248429] x17: 000000000404006d x16: ffffadf89f8166c4 x15: ffffadf8a1ab6c70 [ 6.347820] x14: 0000000000000000 x13: ffffadf8a1ab6cf8 x12: 000000000000060f [ 6.355145] x11: 0000000000000205 x10: ffffadf8a1b11d70 x9 : ffffadf8a1ab6cf8 [ 6.362470] x8 : 00000000ffffefff x7 : ffffadf8a1b0ecf8 x6 : 0000000000000205 [ 6.369795] x5 : ffff000ef1ceb408 x4 : 40000000fffff205 x3 : ffff521650ba3000 [ 6.377120] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000928dd780 [ 6.384444] Call trace: [ 6.386962] clk_branch_toggle+0x174/0x18c (P) [ 6.391530] clk_branch2_enable+0x1c/0x28 [ 6.395644] clk_core_enable+0x6c/0xac [ 6.399502] clk_enable+0x2c/0x4c [ 6.402913] devm_clk_get_optional_enabled+0xac/0x108 [ 6.408096] qcom_ice_create.part.0+0x50/0x2fc [qcom_ice] [ 6.413646] qcom_ice_probe+0x58/0xa8 [qcom_ice] [ 6.418384] platform_probe+0x5c/0x98 [ 6.422153] really_probe+0xbc/0x29c [ 6.425826] __driver_probe_device+0x78/0x12c [ 6.430307] driver_probe_device+0x3c/0x15c [ 6.434605] __driver_attach+0x90/0x19c [ 6.438547] bus_for_each_dev+0x7c/0xe0 [ 6.442486] driver_attach+0x24/0x30 [ 6.446158] bus_add_driver+0xe4/0x208 [ 6.450013] driver_register+0x5c/0x124 [ 6.453954] __platform_driver_register+0x24/0x30 [ 6.458780] qcom_ice_driver_init+0x24/0x1000 [qcom_ice] [ 6.464229] do_one_initcall+0x80/0x1c8 [ 6.468173] do_init_module+0x58/0x234 [ 6.472028] load_module+0x1a84/0x1c84 [ 6.475881] init_module_from_file+0x88/0xcc [ 6.480262] __arm64_sys_finit_module+0x144/0x330 [ 6.485097] invoke_syscall+0x48/0x10c [ 6.488954] el0_svc_common.constprop.0+0xc0/0xe0 [ 6.493790] do_el0_svc+0x1c/0x28 [ 6.497203] el0_svc+0x34/0xec [ 6.500348] el0t_64_sync_handler+0xa0/0xe4 [ 6.504645] el0t_64_sync+0x198/0x19c [ 6.508414] ---[ end trace 0000000000000000 ]--- [ 6.514544] qcom-ice 1d88000.crypto: probe with driver qcom-ice failed >> Also updated the suspend and resume callbacks to handle votes on these >> resources. >> >> Signed-off-by: Harshal Dev > > Where is the Fixes tag? Ack, I will add it in v2 of this patch. > >> --- >> drivers/soc/qcom/ice.c | 20 ++++++++++++++++++++ >> 1 file changed, 20 insertions(+) >> >> diff --git a/drivers/soc/qcom/ice.c b/drivers/soc/qcom/ice.c >> index b203bc685cad..4b50d05ca02a 100644 >> --- a/drivers/soc/qcom/ice.c >> +++ b/drivers/soc/qcom/ice.c >> @@ -16,6 +16,8 @@ >> #include >> #include >> #include >> +#include >> +#include >> >> #include >> >> @@ -108,6 +110,7 @@ struct qcom_ice { >> void __iomem *base; >> >> struct clk *core_clk; >> + struct clk *iface_clk; >> bool use_hwkm; >> bool hwkm_init_complete; >> u8 hwkm_version; >> @@ -310,12 +313,20 @@ int qcom_ice_resume(struct qcom_ice *ice) >> struct device *dev = ice->dev; >> int err; >> >> + pm_runtime_get_sync(dev); > > This is not needed as the power domain would be enabled at this point. Would this be enabled due to the genpd framework? I am not observing that during probe. Because this call is made by the UFS/EMMC driver, perhaps you mean the situation at this point is different? > >> err = clk_prepare_enable(ice->core_clk); >> if (err) { >> dev_err(dev, "failed to enable core clock (%d)\n", >> err); >> return err; >> } >> + >> + err = clk_prepare_enable(ice->iface_clk); >> + if (err) { >> + dev_err(dev, "failed to enable iface clock (%d)\n", >> + err); >> + return err; >> + } > > Use clk_bulk API to enable all clocks in one go. Ack, I'll use clk_bulk_prepare_enable(). > >> qcom_ice_hwkm_init(ice); >> return qcom_ice_wait_bist_status(ice); >> } >> @@ -323,7 +334,9 @@ EXPORT_SYMBOL_GPL(qcom_ice_resume); >> >> int qcom_ice_suspend(struct qcom_ice *ice) >> { >> + clk_disable_unprepare(ice->iface_clk); > > Same here. Ack, clk_bulk_disable_unprepare() would look good. As Konrad pointed out, if iface clock is not present in DT, thse APIs are fine with NULL pointers here. > >> clk_disable_unprepare(ice->core_clk); >> + pm_runtime_put_sync(ice->dev); > > Not needed. > >> ice->hwkm_init_complete = false; >> >> return 0; >> @@ -584,6 +597,10 @@ static struct qcom_ice *qcom_ice_create(struct device *dev, >> if (IS_ERR(engine->core_clk)) >> return ERR_CAST(engine->core_clk); >> >> + engine->iface_clk = devm_clk_get_enabled(dev, "iface_clk"); >> + if (IS_ERR(engine->iface_clk)) >> + return ERR_CAST(engine->iface_clk); >> + > > Same here. Use devm_clk_bulk_get_all_enabled(). As per discussion on the DT binding patch, I can do this once we decide to break the DT backward compatibility with a subsequent patch which makes both clocks mandatory. For v2, I am planning to continue to treat the 'iface' clock as optional via devm_clk_get_optional() API. > >> if (!qcom_ice_check_supported(engine)) >> return ERR_PTR(-EOPNOTSUPP); >> >> @@ -725,6 +742,9 @@ static int qcom_ice_probe(struct platform_device *pdev) >> return PTR_ERR(base); >> } >> >> + devm_pm_runtime_enable(&pdev->dev); >> + pm_runtime_get_sync(&pdev->dev); > > If you want to mark & enable the runtime PM status, you should just do: > > devm_pm_runtime_set_active_enabled(); > > But this is not really needed in this patch. You can add it in a separate patch > for the sake of correctness. If my understanding is correct, I need to call pm_runtime_get_sync() to enable the power domain after enabling the PM runtime to ensure further calls to enable the iface clock do not encounter failure. Just calling devm_pm_runtime_set_active_enabled() will only enable the PM runtime and set it's status to 'active'. It will not enable the power domain. Please do let me know if there is something more to this that I am missing. Regards, Harshal > > - Mani >