All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peng Fan <peng.fan@oss.nxp.com>
To: Hiago De Franco <hiagofranco@gmail.com>
Cc: Mathieu Poirier <mathieu.poirier@linaro.org>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	linux-pm@vger.kernel.org, linux-remoteproc@vger.kernel.org,
	Shawn Guo <shawnguo@kernel.org>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	Bjorn Andersson <andersson@kernel.org>,
	Hiago De Franco <hiago.franco@toradex.com>,
	imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, daniel.baluta@nxp.com,
	iuliana.prodan@oss.nxp.com, Fabio Estevam <festevam@gmail.com>,
	Pengutronix Kernel Team <kernel@pengutronix.de>
Subject: Re: [PATCH 2/3] firmware: imx: move get power mode function from scu-pd.c to misc.c
Date: Tue, 6 May 2025 12:46:18 +0800	[thread overview]
Message-ID: <20250506044618.GC24259@nxa18884-linux> (raw)
In-Reply-To: <20250505154849.64889-3-hiagofranco@gmail.com>

On Mon, May 05, 2025 at 12:48:48PM -0300, Hiago De Franco wrote:
>From: Hiago De Franco <hiago.franco@toradex.com>
>
>Move imx_sc_get_pd_power() from pmdomain/imx/scu-pd.c to
>firmware/imx/misc.c and rename it to imx_sc_pm_get_resource_power_mode()
>to maintain the same naming logic with other functions in misc.c.
>
>This makes the API available for other use cases. For example,
>remoteproc/imx_rproc.c can now use this function to check the power mode
>of the remote core.

Better put this patch at the first I think.

To be simple, I think just export
imx_sc_get_pd_power in drivers/pmdomain/imx/scu-pd.c.
And add the function declaration in include/linux/firmware/imx/sci.h.

Not sure Ulf or Shawn is good with it.

Regards,
Peng

>
>Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
>---
> drivers/firmware/imx/misc.c           | 47 +++++++++++++++++++++++++++
> drivers/pmdomain/imx/scu-pd.c         | 29 ++++-------------
> include/linux/firmware/imx/svc/misc.h |  8 +++++
> 3 files changed, 62 insertions(+), 22 deletions(-)
>
>diff --git a/drivers/firmware/imx/misc.c b/drivers/firmware/imx/misc.c
>index d073cb3ce699..61fcb0066ec9 100644
>--- a/drivers/firmware/imx/misc.c
>+++ b/drivers/firmware/imx/misc.c
>@@ -37,6 +37,18 @@ struct imx_sc_msg_resp_misc_get_ctrl {
> 	u32 val;
> } __packed __aligned(4);
> 
>+struct imx_sc_msg_req_get_resource_power_mode {
>+	struct imx_sc_rpc_msg hdr;
>+	union {
>+		struct {
>+			u16 resource;
>+		} req;
>+		struct {
>+			u8 mode;
>+		} resp;
>+	} data;
>+} __packed __aligned(4);
>+
> /*
>  * This function sets a miscellaneous control value.
>  *
>@@ -135,3 +147,38 @@ int imx_sc_pm_cpu_start(struct imx_sc_ipc *ipc, u32 resource,
> 	return imx_scu_call_rpc(ipc, &msg, true);
> }
> EXPORT_SYMBOL(imx_sc_pm_cpu_start);
>+
>+/*
>+ * This function gets the power mode from a given @resource
>+ *
>+ * @param[in]     ipc         IPC handle
>+ * @param[in]     resource    resource to check the power mode
>+ *
>+ * @return Returns < 0 for errors or the following for success:
>+ * IMX_SC_PM_PW_MODE_OFF  0	Power off
>+ * IMX_SC_PM_PW_MODE_STBY 1	Power in standby
>+ * IMX_SC_PM_PW_MODE_LP   2	Power in low-power
>+ * IMX_SC_PM_PW_MODE_ON   3	Power on
>+ *
>+ * These are defined under firmware/imx/svc/pm.h
>+ */
>+int imx_sc_pm_get_resource_power_mode(struct imx_sc_ipc *ipc, u32 resource)
>+{
>+	struct imx_sc_msg_req_get_resource_power_mode msg;
>+	struct imx_sc_rpc_msg *hdr = &msg.hdr;
>+	int ret;
>+
>+	hdr->ver = IMX_SC_RPC_VERSION;
>+	hdr->svc = IMX_SC_RPC_SVC_PM;
>+	hdr->func = IMX_SC_PM_FUNC_GET_RESOURCE_POWER_MODE;
>+	hdr->size = 2;
>+
>+	msg.data.req.resource = resource;
>+
>+	ret = imx_scu_call_rpc(ipc, &msg, true);
>+	if (ret)
>+		return ret;
>+
>+	return msg.data.resp.mode;
>+}
>+EXPORT_SYMBOL(imx_sc_pm_get_resource_power_mode);
>diff --git a/drivers/pmdomain/imx/scu-pd.c b/drivers/pmdomain/imx/scu-pd.c
>index 01d465d88f60..945f972e636f 100644
>--- a/drivers/pmdomain/imx/scu-pd.c
>+++ b/drivers/pmdomain/imx/scu-pd.c
>@@ -54,6 +54,7 @@
> #include <dt-bindings/firmware/imx/rsrc.h>
> #include <linux/console.h>
> #include <linux/firmware/imx/sci.h>
>+#include <linux/firmware/imx/svc/misc.h>
> #include <linux/firmware/imx/svc/rm.h>
> #include <linux/io.h>
> #include <linux/module.h>
>@@ -328,27 +329,6 @@ static void imx_sc_pd_get_console_rsrc(void)
> 	imx_con_rsrc = specs.args[0];
> }
> 
>-static int imx_sc_get_pd_power(struct device *dev, u32 rsrc)
>-{
>-	struct imx_sc_msg_req_get_resource_power_mode msg;
>-	struct imx_sc_rpc_msg *hdr = &msg.hdr;
>-	int ret;
>-
>-	hdr->ver = IMX_SC_RPC_VERSION;
>-	hdr->svc = IMX_SC_RPC_SVC_PM;
>-	hdr->func = IMX_SC_PM_FUNC_GET_RESOURCE_POWER_MODE;
>-	hdr->size = 2;
>-
>-	msg.data.req.resource = rsrc;
>-
>-	ret = imx_scu_call_rpc(pm_ipc_handle, &msg, true);
>-	if (ret)
>-		dev_err(dev, "failed to get power resource %d mode, ret %d\n",
>-			rsrc, ret);
>-
>-	return msg.data.resp.mode;
>-}
>-
> static int imx_sc_pd_power(struct generic_pm_domain *domain, bool power_on)
> {
> 	struct imx_sc_msg_req_set_resource_power_mode msg;
>@@ -438,7 +418,12 @@ imx_scu_add_pm_domain(struct device *dev, int idx,
> 	if (imx_con_rsrc == sc_pd->rsrc)
> 		sc_pd->pd.flags = GENPD_FLAG_RPM_ALWAYS_ON;
> 
>-	mode = imx_sc_get_pd_power(dev, pd_ranges->rsrc + idx);
>+	mode = imx_sc_pm_get_resource_power_mode(pm_ipc_handle,
>+						 pd_ranges->rsrc + idx);
>+	if (mode < 0)
>+		dev_err(dev, "failed to get power resource %d mode, ret %d\n",
>+			pd_ranges->rsrc + idx, mode);
>+
> 	if (mode == IMX_SC_PM_PW_MODE_ON)
> 		is_off = false;
> 	else
>diff --git a/include/linux/firmware/imx/svc/misc.h b/include/linux/firmware/imx/svc/misc.h
>index 760db08a67fc..376c800a88d0 100644
>--- a/include/linux/firmware/imx/svc/misc.h
>+++ b/include/linux/firmware/imx/svc/misc.h
>@@ -55,6 +55,8 @@ int imx_sc_misc_get_control(struct imx_sc_ipc *ipc, u32 resource,
> 
> int imx_sc_pm_cpu_start(struct imx_sc_ipc *ipc, u32 resource,
> 			bool enable, u64 phys_addr);
>+
>+int imx_sc_pm_get_resource_power_mode(struct imx_sc_ipc *ipc, u32 resource);
> #else
> static inline int imx_sc_misc_set_control(struct imx_sc_ipc *ipc,
> 					  u32 resource, u8 ctrl, u32 val)
>@@ -73,5 +75,11 @@ static inline int imx_sc_pm_cpu_start(struct imx_sc_ipc *ipc, u32 resource,
> {
> 	return -ENOTSUPP;
> }
>+
>+static inline int imx_sc_pm_get_resource_power_mode(struct imx_sc_ipc *ipc,
>+						    u32 resource)
>+{
>+	return -ENOTSUPP;
>+}
> #endif
> #endif /* _SC_MISC_API_H */
>-- 
>2.39.5
>

  reply	other threads:[~2025-05-06  3:37 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-05 15:48 [PATCH 0/3] remoteproc: imx_rproc: allow attaching to running core kicked by the bootloader Hiago De Franco
2025-05-05 15:48 ` [PATCH 1/3] remoteproc: imx_rproc: skip clock enable when M-core is managed by the SCU Hiago De Franco
2025-05-06  4:38   ` Peng Fan
2025-05-06 12:36     ` Hiago De Franco
2025-05-06 15:21       ` Mathieu Poirier
2025-05-05 15:48 ` [PATCH 2/3] firmware: imx: move get power mode function from scu-pd.c to misc.c Hiago De Franco
2025-05-06  4:46   ` Peng Fan [this message]
2025-05-07 15:52     ` Hiago De Franco
2025-05-05 15:48 ` [PATCH 3/3] remoteproc: imx_rproc: add power mode check for remote core attachment Hiago De Franco
2025-05-06  4:53   ` Peng Fan

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=20250506044618.GC24259@nxa18884-linux \
    --to=peng.fan@oss.nxp.com \
    --cc=andersson@kernel.org \
    --cc=daniel.baluta@nxp.com \
    --cc=festevam@gmail.com \
    --cc=hiago.franco@toradex.com \
    --cc=hiagofranco@gmail.com \
    --cc=imx@lists.linux.dev \
    --cc=iuliana.prodan@oss.nxp.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-remoteproc@vger.kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=ulf.hansson@linaro.org \
    /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.