* [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config()
@ 2022-05-26 11:41 Viresh Kumar
2022-05-26 11:42 ` [PATCH 05/31] cpufreq: qcom-nvmem: Migrate to dev_pm_opp_set_config() Viresh Kumar
` (5 more replies)
0 siblings, 6 replies; 9+ messages in thread
From: Viresh Kumar @ 2022-05-26 11:41 UTC (permalink / raw)
To: Abhinav Kumar, Adrian Hunter, Alim Akhtar, Alyssa Rosenzweig,
Andy Gross, Bjorn Andersson, Chanwoo Choi, Chen-Yu Tsai,
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, Rafael Wysocki, Krzysztof Kozlowski,
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 API, 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
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.
I have lightly tested this on Hikey960 for now and also getting help from
various build/boot bots, gitlab and lkp, to get these tested. It would be
helpful if someone with access to the affected platforms can give it a try.
This is pushed here:
git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git opp/config
The entire patchset shall get merged via the OPP tree in 5.20-rc1, please do not
merge individual patches.
Thanks.
--
Viresh
Viresh Kumar (31):
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()
media: 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: Remove the call to 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
OPP: Rearrange dev_pm_opp_set_config() and friends
drivers/cpufreq/cpufreq-dt.c | 14 +-
drivers/cpufreq/imx-cpufreq-dt.c | 12 +-
drivers/cpufreq/qcom-cpufreq-nvmem.c | 107 +---
drivers/cpufreq/sti-cpufreq.c | 22 +-
drivers/cpufreq/sun50i-cpufreq-nvmem.c | 11 +-
drivers/cpufreq/tegra20-cpufreq.c | 12 +-
drivers/cpufreq/ti-cpufreq.c | 38 +-
drivers/devfreq/exynos-bus.c | 14 +-
drivers/devfreq/sun8i-a33-mbus.c | 7 +-
drivers/devfreq/tegra30-devfreq.c | 8 +-
drivers/gpu/drm/lima/lima_devfreq.c | 11 +-
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 | 5 +-
drivers/gpu/drm/msm/dp/dp_ctrl.c | 5 +-
drivers/gpu/drm/msm/dsi/dsi_host.c | 5 +-
drivers/gpu/drm/panfrost/panfrost_devfreq.c | 9 +-
drivers/gpu/drm/tegra/gr3d.c | 6 +-
.../media/platform/qcom/venus/pm_helpers.c | 16 +-
drivers/memory/tegra/tegra124-emc.c | 14 +-
drivers/mmc/host/sdhci-msm.c | 5 +-
drivers/opp/core.c | 540 +++++++-----------
drivers/opp/opp.h | 2 +
drivers/opp/ti-opp-supply.c | 6 +-
drivers/soc/tegra/common.c | 14 +-
drivers/soc/tegra/pmc.c | 8 +-
drivers/spi/spi-geni-qcom.c | 5 +-
drivers/spi/spi-qcom-qspi.c | 5 +-
drivers/tty/serial/qcom_geni_serial.c | 5 +-
include/linux/pm_opp.h | 118 ++--
30 files changed, 444 insertions(+), 598 deletions(-)
--
2.31.1.272.g89b43f80a514
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 05/31] cpufreq: qcom-nvmem: Migrate to dev_pm_opp_set_config()
2022-05-26 11:41 [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
@ 2022-05-26 11:42 ` Viresh Kumar
2022-05-26 11:42 ` [PATCH 14/31] drm/msm: " Viresh Kumar
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Viresh Kumar @ 2022-05-26 11:42 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Ilia Lin, Rafael J. Wysocki,
Viresh Kumar
Cc: linux-pm, Vincent Guittot, Rafael Wysocki, Stephen Boyd,
Nishanth Menon, Krzysztof Kozlowski, linux-arm-msm, 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.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/cpufreq/qcom-cpufreq-nvmem.c | 107 ++++++++-------------------
1 file changed, 29 insertions(+), 78 deletions(-)
diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
index 6dfa86971a75..4166b8d93b70 100644
--- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
@@ -55,9 +55,7 @@ struct qcom_cpufreq_match_data {
};
struct qcom_cpufreq_drv {
- struct opp_table **names_opp_tables;
- struct opp_table **hw_opp_tables;
- struct opp_table **genpd_opp_tables;
+ struct opp_table **opp_tables;
u32 versions;
const struct qcom_cpufreq_match_data *data;
};
@@ -315,72 +313,44 @@ static int qcom_cpufreq_probe(struct platform_device *pdev)
}
of_node_put(np);
- drv->names_opp_tables = kcalloc(num_possible_cpus(),
- sizeof(*drv->names_opp_tables),
+ drv->opp_tables = kcalloc(num_possible_cpus(),
+ sizeof(*drv->opp_tables),
GFP_KERNEL);
- if (!drv->names_opp_tables) {
+ if (!drv->opp_tables) {
ret = -ENOMEM;
goto free_drv;
}
- drv->hw_opp_tables = kcalloc(num_possible_cpus(),
- sizeof(*drv->hw_opp_tables),
- GFP_KERNEL);
- if (!drv->hw_opp_tables) {
- ret = -ENOMEM;
- goto free_opp_names;
- }
-
- drv->genpd_opp_tables = kcalloc(num_possible_cpus(),
- sizeof(*drv->genpd_opp_tables),
- GFP_KERNEL);
- if (!drv->genpd_opp_tables) {
- ret = -ENOMEM;
- goto free_opp;
- }
for_each_possible_cpu(cpu) {
+ struct dev_pm_opp_config config = {
+ .supported_hw = NULL,
+ };
+
cpu_dev = get_cpu_device(cpu);
if (NULL == cpu_dev) {
ret = -ENODEV;
- goto free_genpd_opp;
+ goto free_opp;
}
if (drv->data->get_version) {
+ config.supported_hw = &drv->versions;
+ config.supported_hw_count = 1;
- if (pvs_name) {
- drv->names_opp_tables[cpu] = dev_pm_opp_set_prop_name(
- cpu_dev,
- pvs_name);
- if (IS_ERR(drv->names_opp_tables[cpu])) {
- ret = PTR_ERR(drv->names_opp_tables[cpu]);
- dev_err(cpu_dev, "Failed to add OPP name %s\n",
- pvs_name);
- goto free_opp;
- }
- }
-
- drv->hw_opp_tables[cpu] = dev_pm_opp_set_supported_hw(
- cpu_dev, &drv->versions, 1);
- if (IS_ERR(drv->hw_opp_tables[cpu])) {
- ret = PTR_ERR(drv->hw_opp_tables[cpu]);
- dev_err(cpu_dev,
- "Failed to set supported hardware\n");
- goto free_genpd_opp;
- }
+ if (pvs_name)
+ config.prop_name = pvs_name;
}
if (drv->data->genpd_names) {
- drv->genpd_opp_tables[cpu] =
- dev_pm_opp_attach_genpd(cpu_dev,
- drv->data->genpd_names,
- NULL);
- if (IS_ERR(drv->genpd_opp_tables[cpu])) {
- ret = PTR_ERR(drv->genpd_opp_tables[cpu]);
- if (ret != -EPROBE_DEFER)
- dev_err(cpu_dev,
- "Could not attach to pm_domain: %d\n",
- ret);
- goto free_genpd_opp;
+ config.genpd_names = drv->data->genpd_names;
+ config.virt_devs = NULL;
+ }
+
+ if (config.supported_hw || config.genpd_names) {
+ drv->opp_tables[cpu] = dev_pm_opp_set_config(cpu_dev, &config);
+ if (IS_ERR(drv->opp_tables[cpu])) {
+ ret = PTR_ERR(drv->opp_tables[cpu]);
+ dev_err(cpu_dev, "Failed to set OPP config\n");
+ goto free_opp;
}
}
}
@@ -395,27 +365,13 @@ static int qcom_cpufreq_probe(struct platform_device *pdev)
ret = PTR_ERR(cpufreq_dt_pdev);
dev_err(cpu_dev, "Failed to register platform device\n");
-free_genpd_opp:
- for_each_possible_cpu(cpu) {
- if (IS_ERR(drv->genpd_opp_tables[cpu]))
- break;
- dev_pm_opp_detach_genpd(drv->genpd_opp_tables[cpu]);
- }
- kfree(drv->genpd_opp_tables);
free_opp:
for_each_possible_cpu(cpu) {
- if (IS_ERR(drv->names_opp_tables[cpu]))
+ if (IS_ERR(drv->opp_tables[cpu]))
break;
- dev_pm_opp_put_prop_name(drv->names_opp_tables[cpu]);
+ dev_pm_opp_clear_config(drv->opp_tables[cpu]);
}
- for_each_possible_cpu(cpu) {
- if (IS_ERR(drv->hw_opp_tables[cpu]))
- break;
- dev_pm_opp_put_supported_hw(drv->hw_opp_tables[cpu]);
- }
- kfree(drv->hw_opp_tables);
-free_opp_names:
- kfree(drv->names_opp_tables);
+ kfree(drv->opp_tables);
free_drv:
kfree(drv);
@@ -429,15 +385,10 @@ static int qcom_cpufreq_remove(struct platform_device *pdev)
platform_device_unregister(cpufreq_dt_pdev);
- for_each_possible_cpu(cpu) {
- dev_pm_opp_put_supported_hw(drv->names_opp_tables[cpu]);
- dev_pm_opp_put_supported_hw(drv->hw_opp_tables[cpu]);
- dev_pm_opp_detach_genpd(drv->genpd_opp_tables[cpu]);
- }
+ for_each_possible_cpu(cpu)
+ dev_pm_opp_clear_config(drv->opp_tables[cpu]);
- kfree(drv->names_opp_tables);
- kfree(drv->hw_opp_tables);
- kfree(drv->genpd_opp_tables);
+ kfree(drv->opp_tables);
kfree(drv);
return 0;
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 14/31] drm/msm: Migrate to dev_pm_opp_set_config()
2022-05-26 11:41 [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
2022-05-26 11:42 ` [PATCH 05/31] cpufreq: qcom-nvmem: Migrate to dev_pm_opp_set_config() Viresh Kumar
@ 2022-05-26 11:42 ` Viresh Kumar
2022-05-26 11:42 ` [PATCH 17/31] media: venus: " Viresh Kumar
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Viresh Kumar @ 2022-05-26 11:42 UTC (permalink / raw)
To: Rob Clark, Sean Paul, Abhinav Kumar
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael Wysocki,
Stephen Boyd, Nishanth Menon, Krzysztof Kozlowski, linux-arm-msm,
dri-devel, freedreno, 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.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
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 | 5 ++++-
drivers/gpu/drm/msm/dp/dp_ctrl.c | 5 ++++-
drivers/gpu/drm/msm/dsi/dsi_host.c | 5 ++++-
5 files changed, 23 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
index 407f50a15faa..c39fb085a762 100644
--- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c
@@ -1728,10 +1728,14 @@ static void check_speed_bin(struct device *dev)
{
struct nvmem_cell *cell;
u32 val;
+ struct dev_pm_opp_config config = {
+ .supported_hw = &val,
+ .supported_hw_count = 1,
+ };
/*
* If the OPP table specifies a opp-supported-hw property then we have
- * to set something with dev_pm_opp_set_supported_hw() or the table
+ * to set something with dev_pm_opp_set_config() or the table
* doesn't get populated so pick an arbitrary value that should
* ensure the default frequencies are selected but not conflict with any
* actual bins
@@ -1753,7 +1757,7 @@ static void check_speed_bin(struct device *dev)
nvmem_cell_put(cell);
}
- devm_pm_opp_set_supported_hw(dev, &val, 1);
+ devm_pm_opp_set_config(dev, &config);
}
struct msm_gpu *a5xx_gpu_init(struct drm_device *dev)
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
index 83c31b2ad865..ddb2812b1ff7 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
@@ -1805,6 +1805,10 @@ static int a6xx_set_supported_hw(struct device *dev, struct adreno_rev rev)
u32 supp_hw = UINT_MAX;
u32 speedbin;
int ret;
+ struct dev_pm_opp_config config = {
+ .supported_hw = &supp_hw,
+ .supported_hw_count = 1,
+ };
ret = adreno_read_speedbin(dev, &speedbin);
/*
@@ -1823,11 +1827,7 @@ static int a6xx_set_supported_hw(struct device *dev, struct adreno_rev rev)
supp_hw = fuse_to_supp_hw(dev, rev, speedbin);
done:
- ret = devm_pm_opp_set_supported_hw(dev, &supp_hw, 1);
- if (ret)
- return ret;
-
- return 0;
+ return devm_pm_opp_set_config(dev, &config);
}
static const struct adreno_gpu_funcs funcs = {
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index e29796c4f27b..43f943fdfde5 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -1203,12 +1203,15 @@ static int dpu_bind(struct device *dev, struct device *master, void *data)
struct drm_device *ddev = priv->dev;
struct dpu_kms *dpu_kms;
int ret = 0;
+ struct dev_pm_opp_config config = {
+ .clk_name = "core",
+ };
dpu_kms = devm_kzalloc(&pdev->dev, sizeof(*dpu_kms), GFP_KERNEL);
if (!dpu_kms)
return -ENOMEM;
- ret = devm_pm_opp_set_clkname(dev, "core");
+ ret = devm_pm_opp_set_config(dev, &config);
if (ret)
return ret;
/* OPP table is optional */
diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_ctrl.c
index 53568567e05b..54bdb33eef45 100644
--- a/drivers/gpu/drm/msm/dp/dp_ctrl.c
+++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c
@@ -1974,6 +1974,9 @@ struct dp_ctrl *dp_ctrl_get(struct device *dev, struct dp_link *link,
{
struct dp_ctrl_private *ctrl;
int ret;
+ struct dev_pm_opp_config config = {
+ .clk_name = "ctrl_link",
+ };
if (!dev || !panel || !aux ||
!link || !catalog) {
@@ -1987,7 +1990,7 @@ struct dp_ctrl *dp_ctrl_get(struct device *dev, struct dp_link *link,
return ERR_PTR(-ENOMEM);
}
- ret = devm_pm_opp_set_clkname(dev, "ctrl_link");
+ ret = devm_pm_opp_set_config(dev, &config);
if (ret) {
dev_err(dev, "invalid DP OPP table in device tree\n");
/* caller do PTR_ERR(opp_table) */
diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c
index d51e70fab93d..7d5b027629d2 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_host.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_host.c
@@ -1801,6 +1801,9 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi)
struct msm_dsi_host *msm_host = NULL;
struct platform_device *pdev = msm_dsi->pdev;
int ret;
+ struct dev_pm_opp_config config = {
+ .clk_name = "byte",
+ };
msm_host = devm_kzalloc(&pdev->dev, sizeof(*msm_host), GFP_KERNEL);
if (!msm_host) {
@@ -1862,7 +1865,7 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi)
goto fail;
}
- ret = devm_pm_opp_set_clkname(&pdev->dev, "byte");
+ ret = devm_pm_opp_set_config(&pdev->dev, &config);
if (ret)
return ret;
/* OPP table is optional */
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 17/31] media: venus: Migrate to dev_pm_opp_set_config()
2022-05-26 11:41 [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
2022-05-26 11:42 ` [PATCH 05/31] cpufreq: qcom-nvmem: Migrate to dev_pm_opp_set_config() Viresh Kumar
2022-05-26 11:42 ` [PATCH 14/31] drm/msm: " Viresh Kumar
@ 2022-05-26 11:42 ` Viresh Kumar
2022-05-26 11:42 ` [PATCH 19/31] mmc: sdhci-msm: " Viresh Kumar
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Viresh Kumar @ 2022-05-26 11:42 UTC (permalink / raw)
To: Stanimir Varbanov, Andy Gross, Bjorn Andersson
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael Wysocki,
Stephen Boyd, Nishanth Menon, Krzysztof Kozlowski, linux-media,
linux-arm-msm, 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.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/media/platform/qcom/venus/pm_helpers.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
index cb48c5ff3dee..16f8849896a9 100644
--- a/drivers/media/platform/qcom/venus/pm_helpers.c
+++ b/drivers/media/platform/qcom/venus/pm_helpers.c
@@ -294,12 +294,15 @@ static int load_scale_v1(struct venus_inst *inst)
static int core_get_v1(struct venus_core *core)
{
int ret;
+ struct dev_pm_opp_config config = {
+ .clk_name = "core",
+ };
ret = core_clks_get(core);
if (ret)
return ret;
- ret = devm_pm_opp_set_clkname(core->dev, "core");
+ ret = devm_pm_opp_set_config(core->dev, &config);
if (ret)
return ret;
@@ -862,6 +865,10 @@ static int vcodec_domains_get(struct venus_core *core)
const struct venus_resources *res = core->res;
struct device *pd;
unsigned int i;
+ struct dev_pm_opp_config config = {
+ .genpd_names = res->opp_pmdomain,
+ .virt_devs = &opp_virt_dev,
+ };
if (!res->vcodec_pmdomains_num)
goto skip_pmdomains;
@@ -879,7 +886,7 @@ static int vcodec_domains_get(struct venus_core *core)
return 0;
/* Attach the power domain for setting performance state */
- ret = devm_pm_opp_attach_genpd(dev, res->opp_pmdomain, &opp_virt_dev);
+ ret = devm_pm_opp_set_config(dev, &config);
if (ret)
goto opp_attach_err;
@@ -978,6 +985,9 @@ static int core_get_v4(struct venus_core *core)
struct device *dev = core->dev;
const struct venus_resources *res = core->res;
int ret;
+ struct dev_pm_opp_config config = {
+ .clk_name = "core",
+ };
ret = core_clks_get(core);
if (ret)
@@ -1003,7 +1013,7 @@ static int core_get_v4(struct venus_core *core)
if (legacy_binding)
return 0;
- ret = devm_pm_opp_set_clkname(dev, "core");
+ ret = devm_pm_opp_set_config(dev, &config);
if (ret)
return ret;
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 19/31] mmc: sdhci-msm: Migrate to dev_pm_opp_set_config()
2022-05-26 11:41 [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
` (2 preceding siblings ...)
2022-05-26 11:42 ` [PATCH 17/31] media: venus: " Viresh Kumar
@ 2022-05-26 11:42 ` Viresh Kumar
2022-06-02 9:47 ` Ulf Hansson
2022-05-26 11:42 ` [PATCH 23/31] spi: qcom: " Viresh Kumar
2022-05-26 11:42 ` [PATCH 24/31] serial: " Viresh Kumar
5 siblings, 1 reply; 9+ messages in thread
From: Viresh Kumar @ 2022-05-26 11:42 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Adrian Hunter, Ulf Hansson
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael Wysocki,
Stephen Boyd, Nishanth Menon, Krzysztof Kozlowski, linux-mmc,
linux-arm-msm, 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.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/mmc/host/sdhci-msm.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 50c71e0ba5e4..994f3f0231f7 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -2496,6 +2496,9 @@ static int sdhci_msm_probe(struct platform_device *pdev)
const struct sdhci_msm_offset *msm_offset;
const struct sdhci_msm_variant_info *var_info;
struct device_node *node = pdev->dev.of_node;
+ struct dev_pm_opp_config opp_config = {
+ .clk_name = "core",
+ };
host = sdhci_pltfm_init(pdev, &sdhci_msm_pdata, sizeof(*msm_host));
if (IS_ERR(host))
@@ -2564,7 +2567,7 @@ static int sdhci_msm_probe(struct platform_device *pdev)
if (ret)
goto bus_clk_disable;
- ret = devm_pm_opp_set_clkname(&pdev->dev, "core");
+ ret = devm_pm_opp_set_config(&pdev->dev, &opp_config);
if (ret)
goto bus_clk_disable;
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 23/31] spi: qcom: Migrate to dev_pm_opp_set_config()
2022-05-26 11:41 [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
` (3 preceding siblings ...)
2022-05-26 11:42 ` [PATCH 19/31] mmc: sdhci-msm: " Viresh Kumar
@ 2022-05-26 11:42 ` Viresh Kumar
2022-05-26 12:41 ` Mark Brown
2022-05-26 11:42 ` [PATCH 24/31] serial: " Viresh Kumar
5 siblings, 1 reply; 9+ messages in thread
From: Viresh Kumar @ 2022-05-26 11:42 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Mark Brown
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael Wysocki,
Stephen Boyd, Nishanth Menon, Krzysztof Kozlowski, linux-arm-msm,
linux-spi, 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.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/spi/spi-geni-qcom.c | 5 ++++-
drivers/spi/spi-qcom-qspi.c | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c
index 4e83cc5b445d..d869f270dcca 100644
--- a/drivers/spi/spi-geni-qcom.c
+++ b/drivers/spi/spi-geni-qcom.c
@@ -892,6 +892,9 @@ static int spi_geni_probe(struct platform_device *pdev)
void __iomem *base;
struct clk *clk;
struct device *dev = &pdev->dev;
+ struct dev_pm_opp_config config = {
+ .clk_name = "se",
+ };
irq = platform_get_irq(pdev, 0);
if (irq < 0)
@@ -922,7 +925,7 @@ static int spi_geni_probe(struct platform_device *pdev)
mas->se.base = base;
mas->se.clk = clk;
- ret = devm_pm_opp_set_clkname(&pdev->dev, "se");
+ ret = devm_pm_opp_set_config(&pdev->dev, &config);
if (ret)
return ret;
/* OPP table is optional */
diff --git a/drivers/spi/spi-qcom-qspi.c b/drivers/spi/spi-qcom-qspi.c
index c334dfec4117..5ab3ae406ef7 100644
--- a/drivers/spi/spi-qcom-qspi.c
+++ b/drivers/spi/spi-qcom-qspi.c
@@ -458,6 +458,9 @@ static int qcom_qspi_probe(struct platform_device *pdev)
struct device *dev;
struct spi_master *master;
struct qcom_qspi *ctrl;
+ struct dev_pm_opp_config config = {
+ .clk_name = "core",
+ };
dev = &pdev->dev;
@@ -529,7 +532,7 @@ static int qcom_qspi_probe(struct platform_device *pdev)
master->handle_err = qcom_qspi_handle_err;
master->auto_runtime_pm = true;
- ret = devm_pm_opp_set_clkname(&pdev->dev, "core");
+ ret = devm_pm_opp_set_config(&pdev->dev, &config);
if (ret)
return ret;
/* OPP table is optional */
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 24/31] serial: qcom: Migrate to dev_pm_opp_set_config()
2022-05-26 11:41 [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
` (4 preceding siblings ...)
2022-05-26 11:42 ` [PATCH 23/31] spi: qcom: " Viresh Kumar
@ 2022-05-26 11:42 ` Viresh Kumar
5 siblings, 0 replies; 9+ messages in thread
From: Viresh Kumar @ 2022-05-26 11:42 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Greg Kroah-Hartman, Jiri Slaby
Cc: Viresh Kumar, linux-pm, Vincent Guittot, Rafael Wysocki,
Stephen Boyd, Nishanth Menon, Krzysztof Kozlowski, linux-arm-msm,
linux-serial, 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.
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
drivers/tty/serial/qcom_geni_serial.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
index 1543a6028856..391fcc3a0f61 100644
--- a/drivers/tty/serial/qcom_geni_serial.c
+++ b/drivers/tty/serial/qcom_geni_serial.c
@@ -1331,6 +1331,9 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
int irq;
bool console = false;
struct uart_driver *drv;
+ struct dev_pm_opp_config config = {
+ .clk_name = "se",
+ };
if (of_device_is_compatible(pdev->dev.of_node, "qcom,geni-debug-uart"))
console = true;
@@ -1414,7 +1417,7 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
if (of_property_read_bool(pdev->dev.of_node, "cts-rts-swap"))
port->cts_rts_swap = true;
- ret = devm_pm_opp_set_clkname(&pdev->dev, "se");
+ ret = devm_pm_opp_set_config(&pdev->dev, &config);
if (ret)
return ret;
/* OPP table is optional */
--
2.31.1.272.g89b43f80a514
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 23/31] spi: qcom: Migrate to dev_pm_opp_set_config()
2022-05-26 11:42 ` [PATCH 23/31] spi: qcom: " Viresh Kumar
@ 2022-05-26 12:41 ` Mark Brown
0 siblings, 0 replies; 9+ messages in thread
From: Mark Brown @ 2022-05-26 12:41 UTC (permalink / raw)
To: Viresh Kumar
Cc: Andy Gross, Bjorn Andersson, linux-pm, Vincent Guittot,
Rafael Wysocki, Stephen Boyd, Nishanth Menon, Krzysztof Kozlowski,
linux-arm-msm, linux-spi, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 249 bytes --]
On Thu, May 26, 2022 at 05:12:22PM +0530, Viresh Kumar wrote:
> The OPP core now provides a unified API for setting all configuration
> types, i.e. dev_pm_opp_set_config().
>
> Lets start using it.
Acked-by: Mark Brown <broonie@kernel.org>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 19/31] mmc: sdhci-msm: Migrate to dev_pm_opp_set_config()
2022-05-26 11:42 ` [PATCH 19/31] mmc: sdhci-msm: " Viresh Kumar
@ 2022-06-02 9:47 ` Ulf Hansson
0 siblings, 0 replies; 9+ messages in thread
From: Ulf Hansson @ 2022-06-02 9:47 UTC (permalink / raw)
To: Viresh Kumar
Cc: Andy Gross, Bjorn Andersson, Adrian Hunter, linux-pm,
Vincent Guittot, Rafael Wysocki, Stephen Boyd, Nishanth Menon,
Krzysztof Kozlowski, linux-mmc, linux-arm-msm, linux-kernel
On Thu, 26 May 2022 at 13:44, Viresh Kumar <viresh.kumar@linaro.org> wrote:
>
> The OPP core now provides a unified API for setting all configuration
> types, i.e. dev_pm_opp_set_config().
>
> Lets start using it.
>
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Kind regards
Uffe
> ---
> drivers/mmc/host/sdhci-msm.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
> index 50c71e0ba5e4..994f3f0231f7 100644
> --- a/drivers/mmc/host/sdhci-msm.c
> +++ b/drivers/mmc/host/sdhci-msm.c
> @@ -2496,6 +2496,9 @@ static int sdhci_msm_probe(struct platform_device *pdev)
> const struct sdhci_msm_offset *msm_offset;
> const struct sdhci_msm_variant_info *var_info;
> struct device_node *node = pdev->dev.of_node;
> + struct dev_pm_opp_config opp_config = {
> + .clk_name = "core",
> + };
>
> host = sdhci_pltfm_init(pdev, &sdhci_msm_pdata, sizeof(*msm_host));
> if (IS_ERR(host))
> @@ -2564,7 +2567,7 @@ static int sdhci_msm_probe(struct platform_device *pdev)
> if (ret)
> goto bus_clk_disable;
>
> - ret = devm_pm_opp_set_clkname(&pdev->dev, "core");
> + ret = devm_pm_opp_set_config(&pdev->dev, &opp_config);
> if (ret)
> goto bus_clk_disable;
>
> --
> 2.31.1.272.g89b43f80a514
>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-06-02 9:48 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-26 11:41 [PATCH 00/31] OPP: Add new configuration interface: dev_pm_opp_set_config() Viresh Kumar
2022-05-26 11:42 ` [PATCH 05/31] cpufreq: qcom-nvmem: Migrate to dev_pm_opp_set_config() Viresh Kumar
2022-05-26 11:42 ` [PATCH 14/31] drm/msm: " Viresh Kumar
2022-05-26 11:42 ` [PATCH 17/31] media: venus: " Viresh Kumar
2022-05-26 11:42 ` [PATCH 19/31] mmc: sdhci-msm: " Viresh Kumar
2022-06-02 9:47 ` Ulf Hansson
2022-05-26 11:42 ` [PATCH 23/31] spi: qcom: " Viresh Kumar
2022-05-26 12:41 ` Mark Brown
2022-05-26 11:42 ` [PATCH 24/31] serial: " 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).