From: Ulf Hansson <ulf.hansson@linaro.org> To: Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi <cristian.marussi@arm.com>, Viresh Kumar <vireshk@kernel.org>, Nishanth Menon <nm@ti.com>, Stephen Boyd <sboyd@kernel.org> Cc: Nikunj Kela <nkela@quicinc.com>, Prasad Sodagudi <psodagud@quicinc.com>, Alexandre Torgue <alexandre.torgue@foss.st.com>, Ulf Hansson <ulf.hansson@linaro.org>, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 08/16] PM: domains: Allow genpd providers to manage OPP tables directly by its FW Date: Wed, 7 Jun 2023 14:46:20 +0200 [thread overview] Message-ID: <20230607124628.157465-9-ulf.hansson@linaro.org> (raw) In-Reply-To: <20230607124628.157465-1-ulf.hansson@linaro.org> In some cases the OPP tables aren't specified in device tree, but rather encoded in the FW. To allow a genpd provider to specify them dynamically instead, let's add a new genpd flag, GENPD_FLAG_OPP_TABLE_FW. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> --- drivers/base/power/domain.c | 11 ++++++----- include/linux/pm_domain.h | 5 +++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 32084e38b73d..cb35c040216a 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -130,6 +130,7 @@ static const struct genpd_lock_ops genpd_spin_ops = { #define genpd_is_active_wakeup(genpd) (genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP) #define genpd_is_cpu_domain(genpd) (genpd->flags & GENPD_FLAG_CPU_DOMAIN) #define genpd_is_rpm_always_on(genpd) (genpd->flags & GENPD_FLAG_RPM_ALWAYS_ON) +#define genpd_is_opp_table_fw(genpd) (genpd->flags & GENPD_FLAG_OPP_TABLE_FW) static inline bool irq_safe_dev_in_sleep_domain(struct device *dev, const struct generic_pm_domain *genpd) @@ -2328,7 +2329,7 @@ int of_genpd_add_provider_simple(struct device_node *np, genpd->dev.of_node = np; /* Parse genpd OPP table */ - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table(&genpd->dev); if (ret) return dev_err_probe(&genpd->dev, ret, "Failed to add OPP table\n"); @@ -2343,7 +2344,7 @@ int of_genpd_add_provider_simple(struct device_node *np, ret = genpd_add_provider(np, genpd_xlate_simple, genpd); if (ret) { - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2387,7 +2388,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, genpd->dev.of_node = np; /* Parse genpd OPP table */ - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table_indexed(&genpd->dev, i); if (ret) { dev_err_probe(&genpd->dev, ret, @@ -2423,7 +2424,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, genpd->provider = NULL; genpd->has_provider = false; - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2455,7 +2456,7 @@ void of_genpd_del_provider(struct device_node *np) if (gpd->provider == &np->fwnode) { gpd->has_provider = false; - if (!gpd->set_performance_state) + if (genpd_is_opp_table_fw(gpd) || !gpd->set_performance_state) continue; dev_pm_opp_put_opp_table(gpd->opp_table); diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index f776fb93eaa0..05ad8cefdff1 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -61,6 +61,10 @@ * GENPD_FLAG_MIN_RESIDENCY: Enable the genpd governor to consider its * components' next wakeup when determining the * optimal idle state. + * + * GENPD_FLAG_OPP_TABLE_FW: The genpd provider supports performance states, + * but its corresponding OPP tables are not + * described in DT, but are given directly by FW. */ #define GENPD_FLAG_PM_CLK (1U << 0) #define GENPD_FLAG_IRQ_SAFE (1U << 1) @@ -69,6 +73,7 @@ #define GENPD_FLAG_CPU_DOMAIN (1U << 4) #define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5) #define GENPD_FLAG_MIN_RESIDENCY (1U << 6) +#define GENPD_FLAG_OPP_TABLE_FW (1U << 7) enum gpd_status { GENPD_STATE_ON = 0, /* PM domain is on */ -- 2.34.1
WARNING: multiple messages have this Message-ID (diff)
From: Ulf Hansson <ulf.hansson@linaro.org> To: Sudeep Holla <sudeep.holla@arm.com>, Cristian Marussi <cristian.marussi@arm.com>, Viresh Kumar <vireshk@kernel.org>, Nishanth Menon <nm@ti.com>, Stephen Boyd <sboyd@kernel.org> Cc: Nikunj Kela <nkela@quicinc.com>, Prasad Sodagudi <psodagud@quicinc.com>, Alexandre Torgue <alexandre.torgue@foss.st.com>, Ulf Hansson <ulf.hansson@linaro.org>, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 08/16] PM: domains: Allow genpd providers to manage OPP tables directly by its FW Date: Wed, 7 Jun 2023 14:46:20 +0200 [thread overview] Message-ID: <20230607124628.157465-9-ulf.hansson@linaro.org> (raw) In-Reply-To: <20230607124628.157465-1-ulf.hansson@linaro.org> In some cases the OPP tables aren't specified in device tree, but rather encoded in the FW. To allow a genpd provider to specify them dynamically instead, let's add a new genpd flag, GENPD_FLAG_OPP_TABLE_FW. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> --- drivers/base/power/domain.c | 11 ++++++----- include/linux/pm_domain.h | 5 +++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 32084e38b73d..cb35c040216a 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -130,6 +130,7 @@ static const struct genpd_lock_ops genpd_spin_ops = { #define genpd_is_active_wakeup(genpd) (genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP) #define genpd_is_cpu_domain(genpd) (genpd->flags & GENPD_FLAG_CPU_DOMAIN) #define genpd_is_rpm_always_on(genpd) (genpd->flags & GENPD_FLAG_RPM_ALWAYS_ON) +#define genpd_is_opp_table_fw(genpd) (genpd->flags & GENPD_FLAG_OPP_TABLE_FW) static inline bool irq_safe_dev_in_sleep_domain(struct device *dev, const struct generic_pm_domain *genpd) @@ -2328,7 +2329,7 @@ int of_genpd_add_provider_simple(struct device_node *np, genpd->dev.of_node = np; /* Parse genpd OPP table */ - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table(&genpd->dev); if (ret) return dev_err_probe(&genpd->dev, ret, "Failed to add OPP table\n"); @@ -2343,7 +2344,7 @@ int of_genpd_add_provider_simple(struct device_node *np, ret = genpd_add_provider(np, genpd_xlate_simple, genpd); if (ret) { - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2387,7 +2388,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, genpd->dev.of_node = np; /* Parse genpd OPP table */ - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table_indexed(&genpd->dev, i); if (ret) { dev_err_probe(&genpd->dev, ret, @@ -2423,7 +2424,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, genpd->provider = NULL; genpd->has_provider = false; - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2455,7 +2456,7 @@ void of_genpd_del_provider(struct device_node *np) if (gpd->provider == &np->fwnode) { gpd->has_provider = false; - if (!gpd->set_performance_state) + if (genpd_is_opp_table_fw(gpd) || !gpd->set_performance_state) continue; dev_pm_opp_put_opp_table(gpd->opp_table); diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index f776fb93eaa0..05ad8cefdff1 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -61,6 +61,10 @@ * GENPD_FLAG_MIN_RESIDENCY: Enable the genpd governor to consider its * components' next wakeup when determining the * optimal idle state. + * + * GENPD_FLAG_OPP_TABLE_FW: The genpd provider supports performance states, + * but its corresponding OPP tables are not + * described in DT, but are given directly by FW. */ #define GENPD_FLAG_PM_CLK (1U << 0) #define GENPD_FLAG_IRQ_SAFE (1U << 1) @@ -69,6 +73,7 @@ #define GENPD_FLAG_CPU_DOMAIN (1U << 4) #define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5) #define GENPD_FLAG_MIN_RESIDENCY (1U << 6) +#define GENPD_FLAG_OPP_TABLE_FW (1U << 7) enum gpd_status { GENPD_STATE_ON = 0, /* PM domain is on */ -- 2.34.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-06-07 12:47 UTC|newest] Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-06-07 12:46 [PATCH 00/16] arm_scmi/opp/dvfs: Add generic performance scaling support Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 01/16] firmware: arm_scmi: Extend perf protocol ops to get number of domains Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 02/16] firmware: arm_scmi: Extend perf protocol ops to get the name of a domain Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 03/16] firmware: arm_scmi: Extend perf protocol ops to inform of set level support Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 04/16] cpufreq: scmi: Prepare to move OF parsing of domain-id to cpufreq Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 05/16] firmware: arm_scmi: Align perf ops to use domain-id as in-parameter Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 06/16] firmware: arm_scmi: Drop redundant ->device_domain_id() from perf ops Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 07/16] cpufreq: scmi: Avoid one OF parsing in scmi_get_sharing_cpus() Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson [this message] 2023-06-07 12:46 ` [PATCH 08/16] PM: domains: Allow genpd providers to manage OPP tables directly by its FW Ulf Hansson 2023-06-07 12:46 ` [PATCH 09/16] dt-bindings: firmware: arm,scmi: Extend bindings for protocol@13 Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-14 23:00 ` Rob Herring 2023-06-14 23:00 ` Rob Herring 2023-06-15 9:10 ` Ulf Hansson 2023-06-15 9:10 ` Ulf Hansson 2023-07-14 17:14 ` Rob Herring 2023-07-14 17:14 ` Rob Herring 2023-07-15 12:35 ` Ulf Hansson 2023-07-15 12:35 ` Ulf Hansson 2023-06-15 8:44 ` Sudeep Holla 2023-06-15 8:44 ` Sudeep Holla 2023-06-15 9:39 ` Ulf Hansson 2023-06-15 9:39 ` Ulf Hansson 2023-06-15 13:30 ` Sudeep Holla 2023-06-15 13:30 ` Sudeep Holla 2023-06-16 11:48 ` Ulf Hansson 2023-06-16 11:48 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 10/16] firmware: arm_scmi: Add the SCMI performance domain Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 11/16] OPP: Add dev_pm_opp_add_dynamic() to allow more flexibility Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-08 5:29 ` Viresh Kumar 2023-06-08 5:29 ` Viresh Kumar 2023-06-08 8:59 ` Ulf Hansson 2023-06-08 8:59 ` Ulf Hansson 2023-06-08 9:22 ` Viresh Kumar 2023-06-08 9:22 ` Viresh Kumar 2023-06-08 9:40 ` Ulf Hansson 2023-06-08 9:40 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 12/16] OPP: Extend dev_pm_opp_data with performance level Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 13/16] OPP: Extend dev_pm_opp_data with OPP provider support Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-08 5:34 ` Viresh Kumar 2023-06-08 5:34 ` Viresh Kumar 2023-06-08 9:37 ` Ulf Hansson 2023-06-08 9:37 ` Ulf Hansson 2023-06-08 10:45 ` Viresh Kumar 2023-06-08 10:45 ` Viresh Kumar 2023-06-08 11:45 ` Ulf Hansson 2023-06-08 11:45 ` Ulf Hansson 2023-06-09 5:10 ` Viresh Kumar 2023-06-09 5:10 ` Viresh Kumar 2023-06-09 10:59 ` Ulf Hansson 2023-06-09 10:59 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 14/16] firmware: arm_scmi: Simplify error path in scmi_dvfs_device_opps_add() Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 15/16] firmware: arm_scmi: Extend perf support with OPP from genpd providers Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 12:46 ` [PATCH 16/16] firmware: arm_scmi: Add generic OPP support to the SCMI performance domain Ulf Hansson 2023-06-07 12:46 ` Ulf Hansson 2023-06-07 14:43 ` [PATCH 00/16] arm_scmi/opp/dvfs: Add generic performance scaling support Cristian Marussi 2023-06-07 14:43 ` Cristian Marussi 2023-06-08 9:53 ` Ulf Hansson 2023-06-08 9:53 ` Ulf Hansson
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=20230607124628.157465-9-ulf.hansson@linaro.org \ --to=ulf.hansson@linaro.org \ --cc=alexandre.torgue@foss.st.com \ --cc=cristian.marussi@arm.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=nkela@quicinc.com \ --cc=nm@ti.com \ --cc=psodagud@quicinc.com \ --cc=sboyd@kernel.org \ --cc=sudeep.holla@arm.com \ --cc=vireshk@kernel.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: linkBe 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.