* [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config()
@ 2022-07-01 8:19 Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 08/30] cpufreq: tegra20: Migrate to dev_pm_opp_set_config() Viresh Kumar
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Viresh Kumar @ 2022-07-01 8:19 UTC (permalink / raw)
To: Abhinav Kumar, Adrian Hunter, Alim Akhtar, Alyssa Rosenzweig,
Andy Gross, Bjorn Andersson, Chanwoo Choi, Chen-Yu Tsai,
Dmitry Baryshkov, Dmitry Osipenko, Fabio Estevam,
Greg Kroah-Hartman, Ilia Lin, Jernej Skrabec, Jiri Slaby,
Jonathan Hunter, Krzysztof Kozlowski, Kyungmin Park, Mark Brown,
MyungJoo Ham, Nishanth Menon, NXP Linux Team, Patrice Chotard,
Pengutronix Kernel Team, Qiang Yu, Rafael J. Wysocki, Rob Clark,
Rob Herring, Samuel Holland, Sascha Hauer, Sean Paul, Shawn Guo,
Stanimir Varbanov, Stephen Boyd, Steven Price, Thierry Reding,
Tomeu Vizoso, Ulf Hansson, Viresh Kumar, Viresh Kumar, Yangtao Li
Cc: linux-pm, Vincent Guittot, Dmitry Osipenko, dri-devel, freedreno,
lima, linux-arm-kernel, linux-arm-msm, linux-kernel, linux-media,
linux-mmc, linux-samsung-soc, linux-serial, linux-spi,
linux-sunxi, linux-tegra
Hello,
We have too many configuration specific APIs currently, six of them already,
like dev_pm_opp_set_regulators(). This makes it complex/messy for both the OPP
core and its users to manage. There is also code redundancy in these APIs, in
the way they add/manage the OPP table specific stuff.
This patch series is an attempt to simplify these interfaces by adding a single
interface, dev_pm_opp_set_config(), which replaces all the existing ones. This
series also migrates the users to the new API.
The first two patches help get the API in place, followed by patches to migrate
the end users. Once all the users are migrated, the last few patches remove the
now unused interfaces.
This is pushed here:
git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git opp/linux-next
This is already tested by various folks now.
The entire patchset shall get merged via the OPP tree in 5.20-rc1, please do not
merge individual patches.
V1->V2:
- dev_pm_opp_set_config() doesn't return the OPP table anymore, but a token
allocated with xa_alloc(). The same needs to be passed to clear-config API.
- Updated all users according to that as well.
- The clk_names interface is updated to allow multiple clocks.
- Converted few // comments to /* */.
- Added tags by few people.
- Dropped the last patch to rearrange stuff, not required anymore.
Thanks.
--
Viresh
Viresh Kumar (30):
OPP: Track if clock name is configured by platform
OPP: Add dev_pm_opp_set_config() and friends
cpufreq: dt: Migrate to dev_pm_opp_set_config()
cpufreq: imx: Migrate to dev_pm_opp_set_config()
cpufreq: qcom-nvmem: Migrate to dev_pm_opp_set_config()
cpufreq: sti: Migrate to dev_pm_opp_set_config()
cpufreq: sun50i: Migrate to dev_pm_opp_set_config()
cpufreq: tegra20: Migrate to dev_pm_opp_set_config()
cpufreq: ti: Migrate to dev_pm_opp_set_config()
devfreq: exynos: Migrate to dev_pm_opp_set_config()
devfreq: sun8i: Migrate to dev_pm_opp_set_config()
devfreq: tegra30: Migrate to dev_pm_opp_set_config()
drm/lima: Migrate to dev_pm_opp_set_config()
drm/msm: Migrate to dev_pm_opp_set_config()
drm/panfrost: Migrate to dev_pm_opp_set_config()
drm/tegra: Migrate to dev_pm_opp_set_config()
media: venus: Migrate to dev_pm_opp_set_config()
memory: tegra: Migrate to dev_pm_opp_set_config()
mmc: sdhci-msm: Migrate to dev_pm_opp_set_config()
OPP: ti: Migrate to dev_pm_opp_set_config()
soc/tegra: Add comment over devm_pm_opp_set_clkname()
soc/tegra: Migrate to dev_pm_opp_set_config()
spi: qcom: Migrate to dev_pm_opp_set_config()
serial: qcom: Migrate to dev_pm_opp_set_config()
OPP: Remove dev_pm_opp_set_regulators() and friends
OPP: Remove dev_pm_opp_set_supported_hw() and friends
OPP: Remove dev_pm_opp_set_clkname() and friends
OPP: Remove dev_pm_opp_register_set_opp_helper() and friends
OPP: Remove dev_pm_opp_attach_genpd() and friends
OPP: Remove dev_pm_opp_set_prop_name() and friends
drivers/cpufreq/cpufreq-dt.c | 20 +-
drivers/cpufreq/imx-cpufreq-dt.c | 18 +-
drivers/cpufreq/qcom-cpufreq-nvmem.c | 109 +--
drivers/cpufreq/sti-cpufreq.c | 27 +-
drivers/cpufreq/sun50i-cpufreq-nvmem.c | 36 +-
drivers/cpufreq/tegra20-cpufreq.c | 18 +-
drivers/cpufreq/ti-cpufreq.c | 38 +-
drivers/devfreq/exynos-bus.c | 25 +-
drivers/devfreq/sun8i-a33-mbus.c | 8 +-
drivers/devfreq/tegra30-devfreq.c | 8 +-
drivers/gpu/drm/lima/lima_devfreq.c | 12 +-
drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 8 +-
drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 10 +-
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 6 +-
drivers/gpu/drm/msm/dp/dp_ctrl.c | 6 +-
drivers/gpu/drm/msm/dsi/dsi_host.c | 6 +-
drivers/gpu/drm/panfrost/panfrost_devfreq.c | 9 +-
drivers/gpu/drm/tegra/gr3d.c | 6 +-
.../media/platform/qcom/venus/pm_helpers.c | 18 +-
drivers/memory/tegra/tegra124-emc.c | 17 +-
drivers/mmc/host/sdhci-msm.c | 6 +-
drivers/opp/core.c | 632 ++++++++----------
drivers/opp/opp.h | 23 +
drivers/opp/ti-opp-supply.c | 8 +-
drivers/soc/tegra/common.c | 45 +-
drivers/soc/tegra/pmc.c | 8 +-
drivers/spi/spi-geni-qcom.c | 6 +-
drivers/spi/spi-qcom-qspi.c | 6 +-
drivers/tty/serial/qcom_geni_serial.c | 6 +-
include/linux/pm_opp.h | 121 +---
30 files changed, 605 insertions(+), 661 deletions(-)
--
2.31.1.272.g89b43f80a514
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V2 08/30] cpufreq: tegra20: Migrate to dev_pm_opp_set_config()
2022-07-01 8:19 [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
@ 2022-07-01 8:20 ` Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 12/30] devfreq: tegra30: " Viresh Kumar
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Viresh Kumar @ 2022-07-01 8:20 UTC (permalink / raw)
To: Rafael J. Wysocki, Viresh Kumar, Thierry Reding, Jonathan Hunter
Cc: linux-pm, Vincent Guittot, Stephen Boyd, Nishanth Menon,
Dmitry Osipenko, linux-tegra, linux-kernel
The OPP core now provides a unified API for setting all configuration
types, i.e. dev_pm_opp_set_config().
Lets start using it.
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/cpufreq/tegra20-cpufreq.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/cpufreq/tegra20-cpufreq.c b/drivers/cpufreq/tegra20-cpufreq.c
index e8db3d75be25..edd738e641f8 100644
--- a/drivers/cpufreq/tegra20-cpufreq.c
+++ b/drivers/cpufreq/tegra20-cpufreq.c
@@ -32,9 +32,9 @@ static bool cpu0_node_has_opp_v2_prop(void)
return ret;
}
-static void tegra20_cpufreq_put_supported_hw(void *opp_table)
+static void tegra20_cpufreq_put_supported_hw(void *opp_token)
{
- dev_pm_opp_put_supported_hw(opp_table);
+ dev_pm_opp_clear_config((unsigned long) opp_token);
}
static void tegra20_cpufreq_dt_unregister(void *cpufreq_dt)
@@ -45,10 +45,13 @@ static void tegra20_cpufreq_dt_unregister(void *cpufreq_dt)
static int tegra20_cpufreq_probe(struct platform_device *pdev)
{
struct platform_device *cpufreq_dt;
- struct opp_table *opp_table;
struct device *cpu_dev;
u32 versions[2];
int err;
+ struct dev_pm_opp_config config = {
+ .supported_hw = versions,
+ .supported_hw_count = ARRAY_SIZE(versions),
+ };
if (!cpu0_node_has_opp_v2_prop()) {
dev_err(&pdev->dev, "operating points not found\n");
@@ -71,16 +74,15 @@ static int tegra20_cpufreq_probe(struct platform_device *pdev)
if (WARN_ON(!cpu_dev))
return -ENODEV;
- opp_table = dev_pm_opp_set_supported_hw(cpu_dev, versions, 2);
- err = PTR_ERR_OR_ZERO(opp_table);
- if (err) {
- dev_err(&pdev->dev, "failed to set supported hw: %d\n", err);
+ err = dev_pm_opp_set_config(cpu_dev, &config);
+ if (err < 0) {
+ dev_err(&pdev->dev, "failed to set OPP config: %d\n", err);
return err;
}
err = devm_add_action_or_reset(&pdev->dev,
tegra20_cpufreq_put_supported_hw,
- opp_table);
+ (void *)((unsigned long) err));
if (err)
return err;
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V2 12/30] devfreq: tegra30: Migrate to dev_pm_opp_set_config()
2022-07-01 8:19 [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 08/30] cpufreq: tegra20: Migrate to dev_pm_opp_set_config() Viresh Kumar
@ 2022-07-01 8:20 ` Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 16/30] drm/tegra: " Viresh Kumar
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Viresh Kumar @ 2022-07-01 8:20 UTC (permalink / raw)
To: Dmitry Osipenko, MyungJoo Ham, Kyungmin Park, Chanwoo Choi,
Thierry Reding, Jonathan Hunter
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael J. Wysocki,
Stephen Boyd, Nishanth Menon, Dmitry Osipenko, linux-tegra,
linux-kernel
The OPP core now provides a unified API for setting all configuration
types, i.e. dev_pm_opp_set_config().
Lets start using it.
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/devfreq/tegra30-devfreq.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c
index 65ecf17a36f4..30382bdfc655 100644
--- a/drivers/devfreq/tegra30-devfreq.c
+++ b/drivers/devfreq/tegra30-devfreq.c
@@ -830,6 +830,10 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
unsigned int i;
long rate;
int err;
+ struct dev_pm_opp_config config = {
+ .supported_hw = &hw_version,
+ .supported_hw_count = 1,
+ };
tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL);
if (!tegra)
@@ -874,9 +878,9 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
return err;
}
- err = devm_pm_opp_set_supported_hw(&pdev->dev, &hw_version, 1);
+ err = devm_pm_opp_set_config(&pdev->dev, &config);
if (err) {
- dev_err(&pdev->dev, "Failed to set supported HW: %d\n", err);
+ dev_err(&pdev->dev, "Failed to set OPP config: %d\n", err);
return err;
}
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V2 16/30] drm/tegra: Migrate to dev_pm_opp_set_config()
2022-07-01 8:19 [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 08/30] cpufreq: tegra20: Migrate to dev_pm_opp_set_config() Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 12/30] devfreq: tegra30: " Viresh Kumar
@ 2022-07-01 8:20 ` Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 18/30] memory: tegra: " Viresh Kumar
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Viresh Kumar @ 2022-07-01 8:20 UTC (permalink / raw)
To: Thierry Reding, Jonathan Hunter
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael J. Wysocki,
Stephen Boyd, Nishanth Menon, Dmitry Osipenko, dri-devel,
linux-tegra, linux-kernel
The OPP core now provides a unified API for setting all configuration
types, i.e. dev_pm_opp_set_config().
Lets start using it.
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/gpu/drm/tegra/gr3d.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tegra/gr3d.c b/drivers/gpu/drm/tegra/gr3d.c
index a1fd3113ea96..05c45c104e13 100644
--- a/drivers/gpu/drm/tegra/gr3d.c
+++ b/drivers/gpu/drm/tegra/gr3d.c
@@ -389,6 +389,10 @@ static int gr3d_init_power(struct device *dev, struct gr3d *gr3d)
struct device_link *link;
unsigned int i;
int err;
+ struct dev_pm_opp_config config = {
+ .genpd_names = opp_genpd_names,
+ .virt_devs = &opp_virt_devs,
+ };
err = of_count_phandle_with_args(dev->of_node, "power-domains",
"#power-domain-cells");
@@ -421,7 +425,7 @@ static int gr3d_init_power(struct device *dev, struct gr3d *gr3d)
if (dev->pm_domain)
return 0;
- err = devm_pm_opp_attach_genpd(dev, opp_genpd_names, &opp_virt_devs);
+ err = devm_pm_opp_set_config(dev, &config);
if (err)
return err;
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V2 18/30] memory: tegra: Migrate to dev_pm_opp_set_config()
2022-07-01 8:19 [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
` (2 preceding siblings ...)
2022-07-01 8:20 ` [PATCH V2 16/30] drm/tegra: " Viresh Kumar
@ 2022-07-01 8:20 ` Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 21/30] soc/tegra: Add comment over devm_pm_opp_set_clkname() Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 22/30] soc/tegra: Migrate to dev_pm_opp_set_config() Viresh Kumar
5 siblings, 0 replies; 7+ messages in thread
From: Viresh Kumar @ 2022-07-01 8:20 UTC (permalink / raw)
To: Krzysztof Kozlowski, Thierry Reding, Jonathan Hunter
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael J. Wysocki,
Stephen Boyd, Nishanth Menon, Dmitry Osipenko, linux-kernel,
linux-tegra
The OPP core now provides a unified API for setting all configuration
types, i.e. dev_pm_opp_set_config().
Lets start using it.
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/memory/tegra/tegra124-emc.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/memory/tegra/tegra124-emc.c b/drivers/memory/tegra/tegra124-emc.c
index 908f8d5392b2..8da6baa4c369 100644
--- a/drivers/memory/tegra/tegra124-emc.c
+++ b/drivers/memory/tegra/tegra124-emc.c
@@ -1395,15 +1395,18 @@ static int tegra_emc_interconnect_init(struct tegra_emc *emc)
static int tegra_emc_opp_table_init(struct tegra_emc *emc)
{
u32 hw_version = BIT(tegra_sku_info.soc_speedo_id);
- struct opp_table *hw_opp_table;
- int err;
+ int opp_token, err;
+ struct dev_pm_opp_config config = {
+ .supported_hw = &hw_version,
+ .supported_hw_count = 1,
+ };
- hw_opp_table = dev_pm_opp_set_supported_hw(emc->dev, &hw_version, 1);
- err = PTR_ERR_OR_ZERO(hw_opp_table);
- if (err) {
- dev_err(emc->dev, "failed to set OPP supported HW: %d\n", err);
+ err = dev_pm_opp_set_config(emc->dev, &config);
+ if (err < 0) {
+ dev_err(emc->dev, "failed to set OPP config: %d\n", err);
return err;
}
+ opp_token = err;
err = dev_pm_opp_of_add_table(emc->dev);
if (err) {
@@ -1430,7 +1433,7 @@ static int tegra_emc_opp_table_init(struct tegra_emc *emc)
remove_table:
dev_pm_opp_of_remove_table(emc->dev);
put_hw_table:
- dev_pm_opp_put_supported_hw(hw_opp_table);
+ dev_pm_opp_clear_config(opp_token);
return err;
}
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V2 21/30] soc/tegra: Add comment over devm_pm_opp_set_clkname()
2022-07-01 8:19 [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
` (3 preceding siblings ...)
2022-07-01 8:20 ` [PATCH V2 18/30] memory: tegra: " Viresh Kumar
@ 2022-07-01 8:20 ` Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 22/30] soc/tegra: Migrate to dev_pm_opp_set_config() Viresh Kumar
5 siblings, 0 replies; 7+ messages in thread
From: Viresh Kumar @ 2022-07-01 8:20 UTC (permalink / raw)
To: Thierry Reding, Jonathan Hunter
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael J. Wysocki,
Stephen Boyd, Nishanth Menon, Dmitry Osipenko, linux-tegra,
linux-kernel
Explain why special handling was required here, it isn't obvious at all.
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/soc/tegra/common.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/soc/tegra/common.c b/drivers/soc/tegra/common.c
index 32c346b72635..9f3fdeb1a11c 100644
--- a/drivers/soc/tegra/common.c
+++ b/drivers/soc/tegra/common.c
@@ -108,6 +108,13 @@ int devm_tegra_core_dev_init_opp_table(struct device *dev,
u32 hw_version;
int err;
+ /*
+ * For some devices we don't have any OPP table in the DT, and in order
+ * to use the same code path for all the devices, we create a dummy OPP
+ * table for them via this call. The dummy OPP table is only capable of
+ * doing clk_set_rate() on invocation of dev_pm_opp_set_rate() and
+ * doesn't provide any other functionality.
+ */
err = devm_pm_opp_set_clkname(dev, NULL);
if (err) {
dev_err(dev, "failed to set OPP clk: %d\n", err);
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V2 22/30] soc/tegra: Migrate to dev_pm_opp_set_config()
2022-07-01 8:19 [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
` (4 preceding siblings ...)
2022-07-01 8:20 ` [PATCH V2 21/30] soc/tegra: Add comment over devm_pm_opp_set_clkname() Viresh Kumar
@ 2022-07-01 8:20 ` Viresh Kumar
5 siblings, 0 replies; 7+ messages in thread
From: Viresh Kumar @ 2022-07-01 8:20 UTC (permalink / raw)
To: Thierry Reding, Jonathan Hunter
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael J. Wysocki,
Stephen Boyd, Nishanth Menon, Dmitry Osipenko, linux-tegra,
linux-kernel
The OPP core now provides a unified API for setting all configuration
types, i.e. dev_pm_opp_set_config().
Lets start using it.
Tested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/soc/tegra/common.c | 52 +++++++++++++++++++++-----------------
drivers/soc/tegra/pmc.c | 8 ++++--
2 files changed, 35 insertions(+), 25 deletions(-)
diff --git a/drivers/soc/tegra/common.c b/drivers/soc/tegra/common.c
index 9f3fdeb1a11c..6a099d764cce 100644
--- a/drivers/soc/tegra/common.c
+++ b/drivers/soc/tegra/common.c
@@ -107,36 +107,42 @@ int devm_tegra_core_dev_init_opp_table(struct device *dev,
{
u32 hw_version;
int err;
-
- /*
- * For some devices we don't have any OPP table in the DT, and in order
- * to use the same code path for all the devices, we create a dummy OPP
- * table for them via this call. The dummy OPP table is only capable of
- * doing clk_set_rate() on invocation of dev_pm_opp_set_rate() and
- * doesn't provide any other functionality.
- */
- err = devm_pm_opp_set_clkname(dev, NULL);
- if (err) {
- dev_err(dev, "failed to set OPP clk: %d\n", err);
- return err;
- }
-
- /* Tegra114+ doesn't support OPP yet */
- if (!of_machine_is_compatible("nvidia,tegra20") &&
- !of_machine_is_compatible("nvidia,tegra30"))
- return -ENODEV;
-
- if (of_machine_is_compatible("nvidia,tegra20"))
+ struct dev_pm_opp_config config = {
+ /*
+ * For some devices we don't have any OPP table in the DT, and
+ * in order to use the same code path for all the devices, we
+ * create a dummy OPP table for them via this. The dummy OPP
+ * table is only capable of doing clk_set_rate() on invocation
+ * of dev_pm_opp_set_rate() and doesn't provide any other
+ * functionality.
+ */
+ .clk_names = (const char *[]){ NULL },
+ .clk_count = 1,
+ };
+
+ if (of_machine_is_compatible("nvidia,tegra20")) {
hw_version = BIT(tegra_sku_info.soc_process_id);
- else
+ config.supported_hw = &hw_version;
+ config.supported_hw_count = 1;
+ } else if (of_machine_is_compatible("nvidia,tegra30")) {
hw_version = BIT(tegra_sku_info.soc_speedo_id);
+ config.supported_hw = &hw_version;
+ config.supported_hw_count = 1;
+ }
- err = devm_pm_opp_set_supported_hw(dev, &hw_version, 1);
+ err = devm_pm_opp_set_config(dev, &config);
if (err) {
- dev_err(dev, "failed to set OPP supported HW: %d\n", err);
+ dev_err(dev, "failed to set OPP config: %d\n", err);
return err;
}
+ /*
+ * Tegra114+ doesn't support OPP yet, return early for non tegra20/30
+ * case.
+ */
+ if (!config.supported_hw)
+ return -ENODEV;
+
/*
* Older device-trees have an empty OPP table, we will get
* -ENODEV from devm_pm_opp_of_add_table() in this case.
diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c
index 5611d14d3ba2..64d74a227261 100644
--- a/drivers/soc/tegra/pmc.c
+++ b/drivers/soc/tegra/pmc.c
@@ -1386,6 +1386,10 @@ static int tegra_pmc_core_pd_add(struct tegra_pmc *pmc, struct device_node *np)
struct generic_pm_domain *genpd;
const char *rname = "core";
int err;
+ struct dev_pm_opp_config config = {
+ .regulator_names = &rname,
+ .regulator_count = 1,
+ };
genpd = devm_kzalloc(pmc->dev, sizeof(*genpd), GFP_KERNEL);
if (!genpd)
@@ -1395,10 +1399,10 @@ static int tegra_pmc_core_pd_add(struct tegra_pmc *pmc, struct device_node *np)
genpd->set_performance_state = tegra_pmc_core_pd_set_performance_state;
genpd->opp_to_performance_state = tegra_pmc_core_pd_opp_to_performance_state;
- err = devm_pm_opp_set_regulators(pmc->dev, &rname, 1);
+ err = devm_pm_opp_set_config(pmc->dev, &config);
if (err)
return dev_err_probe(pmc->dev, err,
- "failed to set core OPP regulator\n");
+ "failed to set OPP config\n");
err = pm_genpd_init(genpd, NULL, false);
if (err) {
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-07-01 8:22 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-01 8:19 [PATCH V2 00/30] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 08/30] cpufreq: tegra20: Migrate to dev_pm_opp_set_config() Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 12/30] devfreq: tegra30: " Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 16/30] drm/tegra: " Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 18/30] memory: tegra: " Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 21/30] soc/tegra: Add comment over devm_pm_opp_set_clkname() Viresh Kumar
2022-07-01 8:20 ` [PATCH V2 22/30] soc/tegra: Migrate to dev_pm_opp_set_config() Viresh Kumar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).