From: Bjorn Andersson <andersson@kernel.org>
To: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Cc: Bartosz Golaszewski <brgl@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>,
Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
Subject: Re: [PATCH v2 3/4] firmware: qcom: scm: introduce qcom_scm_clk class for clock management
Date: Tue, 4 Aug 2026 10:35:53 -0500 [thread overview]
Message-ID: <anIGRcBuIKiil36J@baldur> (raw)
In-Reply-To: <20260731-qcom-scm-code-shrink-v2-3-4ba76096915f@oss.qualcomm.com>
On Fri, Jul 31, 2026 at 10:00:36AM +0200, Bartosz Golaszewski wrote:
> 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.
>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
> Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
> ---
> 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 10c79d2e59a14af0532c515d332f65bdfea05621..bb213f64703a7adb9ce413ec00524a7d0a1d3856 100644
> --- a/drivers/firmware/qcom/qcom_scm.c
> +++ b/drivers/firmware/qcom/qcom_scm.c
> @@ -209,6 +209,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;
> @@ -509,13 +512,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)();
No matter how many times I read this line, it doesn't tell me "clocks
will be enabled from here to the end of the scope".
I don't like it.
Regards,
Bjorn
> + if (clk)
> + return clk;
> ret = qcom_scm_call(__scm->dev, &desc, &res);
>
> - qcom_scm_clk_disable();
> -
> return ret ? : res.result[0];
> }
>
> @@ -609,22 +610,19 @@ static int __qcom_scm_pas_init_image(struct device *dev, u32 pas_id,
> };
> 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(dev, &desc, res);
> qcom_scm_bw_disable();
>
> -disable_clk:
> - qcom_scm_clk_disable();
> -
> return ret;
> }
>
> @@ -734,20 +732,17 @@ static int __qcom_scm_pas_mem_setup(struct device *dev, 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(dev, &desc, &res);
> qcom_scm_bw_disable();
>
> -disable_clk:
> - qcom_scm_clk_disable();
> -
> return ret ? : res.result[0];
> }
>
> @@ -819,13 +814,13 @@ static void *__qcom_scm_pas_get_rsc_table2(struct device *dev,
> 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,
> @@ -872,9 +867,6 @@ static void *__qcom_scm_pas_get_rsc_table2(struct device *dev,
> disable_scm_bw:
> qcom_scm_bw_disable();
>
> -disable_clk:
> - qcom_scm_clk_disable();
> -
> return ret ? ERR_PTR(ret) : tbl_ptr;
> }
>
> @@ -902,20 +894,17 @@ static int __qcom_scm_pas_auth_and_reset(struct device *dev, 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(dev, &desc, &res);
> qcom_scm_bw_disable();
>
> -disable_clk:
> - qcom_scm_clk_disable();
> -
> return ret ? : res.result[0];
> }
>
> @@ -997,20 +986,17 @@ static int __qcom_scm_pas_shutdown(struct device *dev, 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(dev, &desc, &res);
> qcom_scm_bw_disable();
>
> -disable_clk:
> - qcom_scm_clk_disable();
> -
> return ret ? : res.result[0];
> }
>
> @@ -1780,18 +1766,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);
>
> @@ -1829,15 +1810,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
>
next prev parent reply other threads:[~2026-08-04 15:35 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-31 8:00 [PATCH v2 0/4] firmware: qcom: scm: simplify code by using classes Bartosz Golaszewski
2026-07-31 8:00 ` [PATCH v2 1/4] firmware: qcom: tzmem: guard against IS_ERR() in the cleanup handler Bartosz Golaszewski
2026-07-31 8:00 ` [PATCH v2 2/4] firmware: qcom: scm: use __free(qcom_tzmem) to simplify cleanup Bartosz Golaszewski
2026-08-04 22:30 ` Bjorn Andersson
2026-08-10 8:36 ` Bartosz Golaszewski
2026-07-31 8:00 ` [PATCH v2 3/4] firmware: qcom: scm: introduce qcom_scm_clk class for clock management Bartosz Golaszewski
2026-08-04 15:35 ` Bjorn Andersson [this message]
2026-08-10 8:37 ` Bartosz Golaszewski
2026-07-31 8:00 ` [PATCH v2 4/4] firmware: qcom: scm: introduce qcom_scm_bw class for bandwidth management Bartosz Golaszewski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=anIGRcBuIKiil36J@baldur \
--to=andersson@kernel.org \
--cc=bartosz.golaszewski@oss.qualcomm.com \
--cc=brgl@kernel.org \
--cc=konrad.dybcio@oss.qualcomm.com \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mukesh.ojha@oss.qualcomm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.