From mboxrd@z Thu Jan 1 00:00:00 1970 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 48EE142B72C for ; Wed, 1 Jul 2026 13:39:22 +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=1782913163; cv=none; b=UIS42QJmF/3OonKp9FPmt6h0M5xxATe6Fx2K4DLi0/SidVUsNdNMmvztJArSh06nx+q5cmnNl7TCkFx+TE9KeDUwYx/16xF+N6VJH+bGFKLFhn/uX7EJS/Jqsgw5OelpsEy6tmiTf17NnWsjYyzxaTp0RRbyIxcwKDOg9V+33kU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782913163; c=relaxed/simple; bh=SFs0hk/sZ+RV77QJkJ3QqT4KeJhULB418pC/0A438aw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hhL4xCSc9XwqhVDO9QY89OP/W06paI3ySQZMAMFpEG3w00hXSa6l43fT/nyUibH3kLyGWkMgHJtK7iDYud8ZFGUbSux+eaoC48/uX7gWNFc8uzFhsjYcIl1On3XW2jv8aL39NYudL9V95ws6xx2aHOFraQfYOyMvYOkIUK8obM4= 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=ffXvF26g; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Sg7usutf; 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="ffXvF26g"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Sg7usutf" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 661A8h95683205 for ; Wed, 1 Jul 2026 13:39:21 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= zyWsVThS0786LQdFkmVzjizo3UAUOYgnqHIePxEYq9A=; b=ffXvF26g4KxZIVrr YRzhAy8F39QOTTedYA7fTRVPwicQt48wxl6gGK1BTkFqUFP9BCB5ctpxRi+kyHPg 6yHtHC4EEP3kQYMG3vvzFjN5YY5P1bIjy05Gd3u//K8ISWEJHLRpwGzbjelbaU9W 7zQNcGtojZvMvS14vMSDWv+pxvi87muDKxjJ7eCTeYJEIvyd7hROWdKmdfTd3UhG mwm0BE6lFM4ZlRh0UY6RtUPpG6MIICVSDP2XSlpVUp2GofNxGVzVOWwj+nQhxe8k 4oiXra2ATJ7GLVrf8ypnrxbcCb9kjWfFCiEFSvhz+IFip+C9uIWlH3e7Zo7YVOtG AGNqLA== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4f4jtqmh5d-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Wed, 01 Jul 2026 13:39:21 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-92e55721a8cso75442285a.1 for ; Wed, 01 Jul 2026 06:39:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1782913160; x=1783517960; 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=zyWsVThS0786LQdFkmVzjizo3UAUOYgnqHIePxEYq9A=; b=Sg7usutf9Kvf1XFAZSg8Jk7zBtipCOCwRyE0yOmc8fUCpiIOGDKHaC2dvV0Bt/AV5b Cgnwf+GefsfK5snVUynJ26gMEK1Hi5/aG2LPT4D00Kq+WiJp97ZkuVfhQqjFVXBHHeVY KMFRsw8R0801ud6iX+gsYG7l4/HVm0VxhfOnKCnE//EFTDR+7sPQynal6x/c6mdK98J9 osGb9mV81i6AeaDi0PcndI/JbBOuC/pZk1xGT02AwOvoydTzVUMCxUoN3n53PiIaD6dA /gk7eFI0h/pMIQI1xQ+tAPfuLKIwLSWv4NZdKpy0DuofaJYQW3p8B2hUG28N0WyW90oz OGiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782913160; x=1783517960; 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=zyWsVThS0786LQdFkmVzjizo3UAUOYgnqHIePxEYq9A=; b=BgXszKZJSUa3UxWEQJPXaGDSxU9NFyJwSxJ82u4743gwEtLNobxYYLhNqPrkzg6Ei2 aJdZWEIpben7xHDMorLDQ7xKT8aTUVYINsEqkkX4jp0FiDNj9t7IEW2yROjE9PAp35OW 0g9Rc80n3kXeiGgqtJeA4qCfgEe7HJgcoxGuoI++DrH8VeWCnKbIEZf/nKxlHUrG2FEb gziYxEZ6KxUJ06ZO7hKJ5u5Ehd/Gt71UK69msfBQOo3U0qNQhH3N9+x2LKpWFvG9Jpq9 gwBKxiC869BsyXqQjWiW2IfrIadvmY2wd5+r4ra0Q9siiwac4ifciSiRmPG49EQibpKx 6YgQ== X-Forwarded-Encrypted: i=1; AFNElJ/s/V9Bq3kLaShmjftp35w8t6p+IPuD6uYGPVWxPZD8rTXET0jMpzyBaSlBIazbjDoAZ+0y33ThrlKlf/Y=@vger.kernel.org X-Gm-Message-State: AOJu0YwARdBHVXmbu2ubMvbOReiMF2FWM5+CiSx6MnMGvYP4L1VAUWRN VCa8Rf7aViICvvacF2AS8F2rWLY7DISNdmdwVQ+AysxG8U/sdXMXZERwiii3j1xA/dEGgZPpCS8 Umns2NwoAeNwR67zxvZZy2qZtKv9yjTJ9BiIfufSqHDe1SIM7wG9v+CTGO6SmhPdl6amqOoSsU0 Q= X-Gm-Gg: AfdE7cnP1k6mgmi1UMKBtszr8Wz8y41m0nilm+wtEEtmoeZn6w0xkIw5Ryy2GhBVKKA I+lwsgb9MMcuP9RdJ2qPNDzB/WJXMij1LHRBrNHhda1KrSGUvOvjf34+A0uvoZdsPmu9e1/jnOY GbYnjaLcIkCSB0BebmlzFTPaQY511HzDAvouZY5E+j6wD60qnb27zetp53GTJpi0pfwfClEx9Gh 3/wdCpQZ411uTgJrDk6NJAPBk/j+Bt+MoNsgdGI8LHpBdpxzps/RvhkjVTi8vDdJy7GjHtC1Te7 pTPKgPjJsdMzyCBFCX1z31ZkHMuXxNW8gFohfazgWc0IFdu7FPDnPRrUUlZI7xyBPTqK5nhTr0W jQo84UPbiAWz+ZtRXr5DvU/gJeUMnm3J3g++axCgY X-Received: by 2002:a05:620a:28ca:b0:92e:745c:6c5a with SMTP id af79cd13be357-92e781d3b43mr253032185a.14.1782913160419; Wed, 01 Jul 2026 06:39:20 -0700 (PDT) X-Received: by 2002:a05:620a:28ca:b0:92e:745c:6c5a with SMTP id af79cd13be357-92e781d3b43mr253022885a.14.1782913159679; Wed, 01 Jul 2026 06:39:19 -0700 (PDT) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:6619:ec60:6996:ac02]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-493c3874f62sm18349985e9.2.2026.07.01.06.39.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jul 2026 06:39:18 -0700 (PDT) From: Bartosz Golaszewski Date: Wed, 01 Jul 2026 15:38:57 +0200 Subject: [PATCH 3/4] firmware: qcom: scm: introduce qcom_scm_clk class for clock management 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: 7bit Message-Id: <20260701-qcom-scm-code-shrink-v1-3-02f5ce02c95a@oss.qualcomm.com> References: <20260701-qcom-scm-code-shrink-v1-0-02f5ce02c95a@oss.qualcomm.com> In-Reply-To: <20260701-qcom-scm-code-shrink-v1-0-02f5ce02c95a@oss.qualcomm.com> To: Bartosz Golaszewski , Bjorn Andersson , Konrad Dybcio Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5291; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=SFs0hk/sZ+RV77QJkJ3QqT4KeJhULB418pC/0A438aw=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBqRRh/RxNb1XEW3PArVwxy8JQa2hS27Iam4gxAb Fha2vDD0RuJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCakUYfwAKCRAFnS7L/zaE w5q1EACEGTgK7rBb/T0nYIDRc92+/2hu5k079g3eOWNbg62wfJuP7dNv7apK8cZn9h5AKUc9Eqh U+/OigcCqf+ofqziTenCBHaXxHkkA4TlzDG6LaI0I9pUcQ/PYUKwK63j2Bw9a3rTGyOj5ypqEaf lf+WsfozUCTMbFpooeilpNSNgZZ7DO31q8M1wYNA0dGXI2Vit8yf2s0OnNh4S+3if0bpxXQ/xF3 qbRD96JN5zuxhGT4JWxiY9bsgJFiwrRjw2wmWXL2TBQzCM/mo2hVwjD0YJbpDpYFp/5IczQogZT vOmtEttBdHPcHBD7NwF9/cDJAnIop6cmJxR1F5eD/Z2wfwKvVa6WWf36/DTaPe66iLvKcUVazqE +HzlLLVAEK0d0betYJ22A0La23YfzN/wY2VuI3sykkcqfA1804k9ridGZp76/9eIp+acxsqCuwy Mtq8L29+EAT095yKWYO5SBssXcmPz38EXlKRPqVAVKWKzPgmMfh7KGoFLwFC2jTqGhHF/JZbVZL OaUdniqp7mexPXzUbxK0EbVKWOT+Qh+qVzFrCCdqPvXOtCC0vNlz9Ru5Oi9yPhaM7HLfjpP9u0n 3fWAIsQn8RB7KK5xUMwx8ThsePWc4wuiVnlSSPPW4MwZy8JnPm803Wu4gOu9/VgrE+58U7N4rWC 3ZHBUifMUTicshw== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: L-9UQ-CmPnMaAj4tDw2H23UwiSCCANgz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzAxMDE0MyBTYWx0ZWRfX/mV+nNps68KX wlM6KHtyS9fhxNVQ/fYtbMqk939mYx8zhOBJlQDRngGvBRn0EjLyTJNv7qr0a3UPc+qprIQlfTx J2udDT2E6ZbGvpQgSymr/kaLyv7PnyJDW2kg/bmOhrrx+1VY8dCPbEHbd3eLbRJ0dxNaTML0k4/ 2Fax8St/d1B/DpjrWEAl95/Q0M86IoLRsUqFA97Q8cHLWEYFNZohXnbGpwNWaWoIl7JQhuupcQX DOWWjpJwlovRtyBMHrW47h/cbSuFdW2xmGtQv2aMkz7fP06LWjZwCwwMF7YsZcmK/ZvjbMeUO/N B+aL7NZ4mwqfmfivvPQYXxWQ3m2LK5th2Je1jsBRvJTlmhBOmwiplu/Xp/N8SPq+UyWEXYwTkNJ s2QS9oA6R9sEmey/RroDY+0g4ep03N4x60dDRS6ntG3wSaDExtcc/zYjBaA1+3Ymfv5v8/6dwLL Bzb8nvNy43Nbzt5T2LA== X-Proofpoint-GUID: L-9UQ-CmPnMaAj4tDw2H23UwiSCCANgz X-Authority-Analysis: v=2.4 cv=LIZWhpW9 c=1 sm=1 tr=0 ts=6a451889 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=wtmscHdGGkZXRT90TS8A:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzAxMDE0MyBTYWx0ZWRfX1oqgtgTS/G2C fpKejjyHLGGdP3YUScvBfRbPmMsdK8JERld7wje9xUWQkvH/20sxnH0x/csVvxW1qKdeQbjfPZ3 Wl2D5s0N2J+r5JhMrBncV7D4h851gGs= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-07-01_03,2026-06-26_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 clxscore=1015 malwarescore=0 bulkscore=0 adultscore=0 impostorscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607010143 Define DEFINE_CLASS(qcom_scm_clk) that calls qcom_scm_clk_enable() on construction and automatically calls qcom_scm_clk_disable() at scope exit *if* the enable succeeded. This allows us to convert all call sites to using CLASS(qcom_scm_clk, clk)() instead of the manual enable/check/disable pattern and to remove the associated goto labels. Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 89 +++++++++++++++------------------------- 1 file changed, 34 insertions(+), 55 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 1684220617748e4890ecb45a1787a6798dafd5cc..35aa9e8886b6ce8ab8eaf16c83fef7aafaef2822 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -192,6 +192,9 @@ static void qcom_scm_clk_disable(void) clk_disable_unprepare(__scm->bus_clk); } +DEFINE_CLASS(qcom_scm_clk, int, if (!_T) qcom_scm_clk_disable(), + qcom_scm_clk_enable(), void) + static int qcom_scm_bw_enable(void) { int ret = 0; @@ -511,13 +514,11 @@ static int qcom_scm_disable_sdi(void) }; struct qcom_scm_res res; - ret = qcom_scm_clk_enable(); - if (ret) - return ret; + CLASS(qcom_scm_clk, clk)(); + if (clk) + return clk; ret = qcom_scm_call(__scm->dev, &desc, &res); - qcom_scm_clk_disable(); - return ret ? : res.result[0]; } @@ -616,22 +617,19 @@ static int __qcom_scm_pas_init_image(u32 pas_id, dma_addr_t mdata_phys, }; int ret; - ret = qcom_scm_clk_enable(); - if (ret) - return ret; + CLASS(qcom_scm_clk, clk)(); + if (clk) + return clk; ret = qcom_scm_bw_enable(); if (ret) - goto disable_clk; + return ret; desc.args[1] = mdata_phys; ret = qcom_scm_call(__scm->dev, &desc, res); qcom_scm_bw_disable(); -disable_clk: - qcom_scm_clk_disable(); - return ret; } @@ -758,20 +756,17 @@ int qcom_scm_pas_mem_setup(u32 pas_id, phys_addr_t addr, phys_addr_t size) }; struct qcom_scm_res res; - ret = qcom_scm_clk_enable(); - if (ret) - return ret; + CLASS(qcom_scm_clk, clk)(); + if (clk) + return clk; ret = qcom_scm_bw_enable(); if (ret) - goto disable_clk; + return ret; ret = qcom_scm_call(__scm->dev, &desc, &res); qcom_scm_bw_disable(); -disable_clk: - qcom_scm_clk_disable(); - return ret ? : res.result[0]; } EXPORT_SYMBOL_GPL(qcom_scm_pas_mem_setup); @@ -877,13 +872,13 @@ struct resource_table *qcom_scm_pas_get_rsc_table(struct qcom_scm_pas_context *c void *tbl_ptr; int ret; - ret = qcom_scm_clk_enable(); - if (ret) - return ERR_PTR(ret); + CLASS(qcom_scm_clk, clk)(); + if (clk) + return ERR_PTR(clk); ret = qcom_scm_bw_enable(); if (ret) - goto disable_clk; + return ERR_PTR(ret); /* * TrustZone can not accept buffer as NULL value as argument hence, @@ -930,9 +925,6 @@ struct resource_table *qcom_scm_pas_get_rsc_table(struct qcom_scm_pas_context *c disable_scm_bw: qcom_scm_bw_disable(); -disable_clk: - qcom_scm_clk_disable(); - return ret ? ERR_PTR(ret) : tbl_ptr; } EXPORT_SYMBOL_GPL(qcom_scm_pas_get_rsc_table); @@ -956,20 +948,17 @@ int qcom_scm_pas_auth_and_reset(u32 pas_id) }; struct qcom_scm_res res; - ret = qcom_scm_clk_enable(); - if (ret) - return ret; + CLASS(qcom_scm_clk, clk)(); + if (clk) + return clk; ret = qcom_scm_bw_enable(); if (ret) - goto disable_clk; + return ret; ret = qcom_scm_call(__scm->dev, &desc, &res); qcom_scm_bw_disable(); -disable_clk: - qcom_scm_clk_disable(); - return ret ? : res.result[0]; } EXPORT_SYMBOL_GPL(qcom_scm_pas_auth_and_reset); @@ -1039,20 +1028,17 @@ int qcom_scm_pas_shutdown(u32 pas_id) }; struct qcom_scm_res res; - ret = qcom_scm_clk_enable(); - if (ret) - return ret; + CLASS(qcom_scm_clk, clk)(); + if (clk) + return clk; ret = qcom_scm_bw_enable(); if (ret) - goto disable_clk; + return ret; ret = qcom_scm_call(__scm->dev, &desc, &res); qcom_scm_bw_disable(); -disable_clk: - qcom_scm_clk_disable(); - return ret ? : res.result[0]; } EXPORT_SYMBOL_GPL(qcom_scm_pas_shutdown); @@ -1791,18 +1777,13 @@ EXPORT_SYMBOL_GPL(qcom_scm_import_ice_key); */ bool qcom_scm_hdcp_available(void) { - bool avail; - int ret = qcom_scm_clk_enable(); + CLASS(qcom_scm_clk, clk)(); - if (ret) - return ret; - - avail = __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_HDCP, - QCOM_SCM_HDCP_INVOKE); - - qcom_scm_clk_disable(); + if (clk) + return false; - return avail; + return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_HDCP, + QCOM_SCM_HDCP_INVOKE); } EXPORT_SYMBOL_GPL(qcom_scm_hdcp_available); @@ -1840,15 +1821,13 @@ int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt, u32 *resp) if (req_cnt > QCOM_SCM_HDCP_MAX_REQ_CNT) return -ERANGE; - ret = qcom_scm_clk_enable(); - if (ret) - return ret; + CLASS(qcom_scm_clk, clk)(); + if (clk) + return clk; ret = qcom_scm_call(__scm->dev, &desc, &res); *resp = res.result[0]; - qcom_scm_clk_disable(); - return ret; } EXPORT_SYMBOL_GPL(qcom_scm_hdcp_req); -- 2.47.3