Skip to content

Commit 6948de3

Browse files
committed
Merge branch 'pm-opp'
* pm-opp: memory: samsung: exynos5422-dmc: Convert to use resource-managed OPP API drm/panfrost: Convert to use resource-managed OPP API drm/lima: Convert to use resource-managed OPP API mmc: sdhci-msm: Convert to use resource-managed OPP API spi: spi-qcom-qspi: Convert to use resource-managed OPP API spi: spi-geni-qcom: Convert to use resource-managed OPP API serial: qcom_geni_serial: Convert to use resource-managed OPP API opp: Change return type of devm_pm_opp_attach_genpd() opp: Change return type of devm_pm_opp_register_set_opp_helper() opp: Add devres wrapper for dev_pm_opp_of_add_table opp: Add devres wrapper for dev_pm_opp_set_supported_hw opp: Add devres wrapper for dev_pm_opp_set_regulators opp: Add devres wrapper for dev_pm_opp_set_clkname
2 parents bf0cc83 + eed7a17 commit 6948de3

13 files changed

Lines changed: 217 additions & 165 deletions

File tree

drivers/gpu/drm/lima/lima_devfreq.c

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -99,20 +99,12 @@ void lima_devfreq_fini(struct lima_device *ldev)
9999
devm_devfreq_remove_device(ldev->dev, devfreq->devfreq);
100100
devfreq->devfreq = NULL;
101101
}
102-
103-
dev_pm_opp_of_remove_table(ldev->dev);
104-
105-
dev_pm_opp_put_regulators(devfreq->regulators_opp_table);
106-
dev_pm_opp_put_clkname(devfreq->clkname_opp_table);
107-
devfreq->regulators_opp_table = NULL;
108-
devfreq->clkname_opp_table = NULL;
109102
}
110103

111104
int lima_devfreq_init(struct lima_device *ldev)
112105
{
113106
struct thermal_cooling_device *cooling;
114107
struct device *dev = ldev->dev;
115-
struct opp_table *opp_table;
116108
struct devfreq *devfreq;
117109
struct lima_devfreq *ldevfreq = &ldev->devfreq;
118110
struct dev_pm_opp *opp;
@@ -125,40 +117,28 @@ int lima_devfreq_init(struct lima_device *ldev)
125117

126118
spin_lock_init(&ldevfreq->lock);
127119

128-
opp_table = dev_pm_opp_set_clkname(dev, "core");
129-
if (IS_ERR(opp_table)) {
130-
ret = PTR_ERR(opp_table);
131-
goto err_fini;
132-
}
133-
134-
ldevfreq->clkname_opp_table = opp_table;
135-
136-
opp_table = dev_pm_opp_set_regulators(dev,
137-
(const char *[]){ "mali" },
138-
1);
139-
if (IS_ERR(opp_table)) {
140-
ret = PTR_ERR(opp_table);
120+
ret = devm_pm_opp_set_clkname(dev, "core");
121+
if (ret)
122+
return ret;
141123

124+
ret = devm_pm_opp_set_regulators(dev, (const char *[]){ "mali" }, 1);
125+
if (ret) {
142126
/* Continue if the optional regulator is missing */
143127
if (ret != -ENODEV)
144-
goto err_fini;
145-
} else {
146-
ldevfreq->regulators_opp_table = opp_table;
128+
return ret;
147129
}
148130

149-
ret = dev_pm_opp_of_add_table(dev);
131+
ret = devm_pm_opp_of_add_table(dev);
150132
if (ret)
151-
goto err_fini;
133+
return ret;
152134

153135
lima_devfreq_reset(ldevfreq);
154136

155137
cur_freq = clk_get_rate(ldev->clk_gpu);
156138

157139
opp = devfreq_recommended_opp(dev, &cur_freq, 0);
158-
if (IS_ERR(opp)) {
159-
ret = PTR_ERR(opp);
160-
goto err_fini;
161-
}
140+
if (IS_ERR(opp))
141+
return PTR_ERR(opp);
162142

163143
lima_devfreq_profile.initial_freq = cur_freq;
164144
dev_pm_opp_put(opp);
@@ -167,8 +147,7 @@ int lima_devfreq_init(struct lima_device *ldev)
167147
DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
168148
if (IS_ERR(devfreq)) {
169149
dev_err(dev, "Couldn't initialize GPU devfreq\n");
170-
ret = PTR_ERR(devfreq);
171-
goto err_fini;
150+
return PTR_ERR(devfreq);
172151
}
173152

174153
ldevfreq->devfreq = devfreq;
@@ -180,10 +159,6 @@ int lima_devfreq_init(struct lima_device *ldev)
180159
ldevfreq->cooling = cooling;
181160

182161
return 0;
183-
184-
err_fini:
185-
lima_devfreq_fini(ldev);
186-
return ret;
187162
}
188163

189164
void lima_devfreq_record_busy(struct lima_devfreq *devfreq)

drivers/gpu/drm/lima/lima_devfreq.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,12 @@
88
#include <linux/ktime.h>
99

1010
struct devfreq;
11-
struct opp_table;
1211
struct thermal_cooling_device;
1312

1413
struct lima_device;
1514

1615
struct lima_devfreq {
1716
struct devfreq *devfreq;
18-
struct opp_table *clkname_opp_table;
19-
struct opp_table *regulators_opp_table;
2017
struct thermal_cooling_device *cooling;
2118

2219
ktime_t busy_time;

drivers/gpu/drm/panfrost/panfrost_devfreq.c

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -89,29 +89,25 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
8989
unsigned long cur_freq;
9090
struct device *dev = &pfdev->pdev->dev;
9191
struct devfreq *devfreq;
92-
struct opp_table *opp_table;
9392
struct thermal_cooling_device *cooling;
9493
struct panfrost_devfreq *pfdevfreq = &pfdev->pfdevfreq;
9594

96-
opp_table = dev_pm_opp_set_regulators(dev, pfdev->comp->supply_names,
97-
pfdev->comp->num_supplies);
98-
if (IS_ERR(opp_table)) {
99-
ret = PTR_ERR(opp_table);
95+
ret = devm_pm_opp_set_regulators(dev, pfdev->comp->supply_names,
96+
pfdev->comp->num_supplies);
97+
if (ret) {
10098
/* Continue if the optional regulator is missing */
10199
if (ret != -ENODEV) {
102100
DRM_DEV_ERROR(dev, "Couldn't set OPP regulators\n");
103-
goto err_fini;
101+
return ret;
104102
}
105-
} else {
106-
pfdevfreq->regulators_opp_table = opp_table;
107103
}
108104

109-
ret = dev_pm_opp_of_add_table(dev);
105+
ret = devm_pm_opp_of_add_table(dev);
110106
if (ret) {
111107
/* Optional, continue without devfreq */
112108
if (ret == -ENODEV)
113109
ret = 0;
114-
goto err_fini;
110+
return ret;
115111
}
116112
pfdevfreq->opp_of_table_added = true;
117113

@@ -122,10 +118,8 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
122118
cur_freq = clk_get_rate(pfdev->clock);
123119

124120
opp = devfreq_recommended_opp(dev, &cur_freq, 0);
125-
if (IS_ERR(opp)) {
126-
ret = PTR_ERR(opp);
127-
goto err_fini;
128-
}
121+
if (IS_ERR(opp))
122+
return PTR_ERR(opp);
129123

130124
panfrost_devfreq_profile.initial_freq = cur_freq;
131125
dev_pm_opp_put(opp);
@@ -134,8 +128,7 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
134128
DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL);
135129
if (IS_ERR(devfreq)) {
136130
DRM_DEV_ERROR(dev, "Couldn't initialize GPU devfreq\n");
137-
ret = PTR_ERR(devfreq);
138-
goto err_fini;
131+
return PTR_ERR(devfreq);
139132
}
140133
pfdevfreq->devfreq = devfreq;
141134

@@ -146,10 +139,6 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
146139
pfdevfreq->cooling = cooling;
147140

148141
return 0;
149-
150-
err_fini:
151-
panfrost_devfreq_fini(pfdev);
152-
return ret;
153142
}
154143

155144
void panfrost_devfreq_fini(struct panfrost_device *pfdev)
@@ -160,14 +149,6 @@ void panfrost_devfreq_fini(struct panfrost_device *pfdev)
160149
devfreq_cooling_unregister(pfdevfreq->cooling);
161150
pfdevfreq->cooling = NULL;
162151
}
163-
164-
if (pfdevfreq->opp_of_table_added) {
165-
dev_pm_opp_of_remove_table(&pfdev->pdev->dev);
166-
pfdevfreq->opp_of_table_added = false;
167-
}
168-
169-
dev_pm_opp_put_regulators(pfdevfreq->regulators_opp_table);
170-
pfdevfreq->regulators_opp_table = NULL;
171152
}
172153

173154
void panfrost_devfreq_resume(struct panfrost_device *pfdev)

drivers/gpu/drm/panfrost/panfrost_devfreq.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88
#include <linux/ktime.h>
99

1010
struct devfreq;
11-
struct opp_table;
1211
struct thermal_cooling_device;
1312

1413
struct panfrost_device;
1514

1615
struct panfrost_devfreq {
1716
struct devfreq *devfreq;
18-
struct opp_table *regulators_opp_table;
1917
struct thermal_cooling_device *cooling;
2018
bool opp_of_table_added;
2119

drivers/memory/samsung/exynos5422-dmc.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ static int exynos5_init_freq_table(struct exynos5_dmc *dmc,
343343
int idx;
344344
unsigned long freq;
345345

346-
ret = dev_pm_opp_of_add_table(dmc->dev);
346+
ret = devm_pm_opp_of_add_table(dmc->dev);
347347
if (ret < 0) {
348348
dev_err(dmc->dev, "Failed to get OPP table\n");
349349
return ret;
@@ -354,15 +354,15 @@ static int exynos5_init_freq_table(struct exynos5_dmc *dmc,
354354
dmc->opp = devm_kmalloc_array(dmc->dev, dmc->opp_count,
355355
sizeof(struct dmc_opp_table), GFP_KERNEL);
356356
if (!dmc->opp)
357-
goto err_opp;
357+
return -ENOMEM;
358358

359359
idx = dmc->opp_count - 1;
360360
for (i = 0, freq = ULONG_MAX; i < dmc->opp_count; i++, freq--) {
361361
struct dev_pm_opp *opp;
362362

363363
opp = dev_pm_opp_find_freq_floor(dmc->dev, &freq);
364364
if (IS_ERR(opp))
365-
goto err_opp;
365+
return PTR_ERR(opp);
366366

367367
dmc->opp[idx - i].freq_hz = freq;
368368
dmc->opp[idx - i].volt_uv = dev_pm_opp_get_voltage(opp);
@@ -371,11 +371,6 @@ static int exynos5_init_freq_table(struct exynos5_dmc *dmc,
371371
}
372372

373373
return 0;
374-
375-
err_opp:
376-
dev_pm_opp_of_remove_table(dmc->dev);
377-
378-
return -EINVAL;
379374
}
380375

381376
/**
@@ -1567,8 +1562,6 @@ static int exynos5_dmc_remove(struct platform_device *pdev)
15671562
clk_disable_unprepare(dmc->mout_bpll);
15681563
clk_disable_unprepare(dmc->fout_bpll);
15691564

1570-
dev_pm_opp_remove_table(dmc->dev);
1571-
15721565
return 0;
15731566
}
15741567

drivers/mmc/host/sdhci-msm.c

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ struct sdhci_msm_host {
264264
struct clk_bulk_data bulk_clks[5];
265265
unsigned long clk_rate;
266266
struct mmc_host *mmc;
267-
struct opp_table *opp_table;
268267
bool use_14lpp_dll_reset;
269268
bool tuning_done;
270269
bool calibration_done;
@@ -2551,17 +2550,15 @@ static int sdhci_msm_probe(struct platform_device *pdev)
25512550
if (ret)
25522551
goto bus_clk_disable;
25532552

2554-
msm_host->opp_table = dev_pm_opp_set_clkname(&pdev->dev, "core");
2555-
if (IS_ERR(msm_host->opp_table)) {
2556-
ret = PTR_ERR(msm_host->opp_table);
2553+
ret = devm_pm_opp_set_clkname(&pdev->dev, "core");
2554+
if (ret)
25572555
goto bus_clk_disable;
2558-
}
25592556

25602557
/* OPP table is optional */
2561-
ret = dev_pm_opp_of_add_table(&pdev->dev);
2558+
ret = devm_pm_opp_of_add_table(&pdev->dev);
25622559
if (ret && ret != -ENODEV) {
25632560
dev_err(&pdev->dev, "Invalid OPP table in Device tree\n");
2564-
goto opp_put_clkname;
2561+
goto bus_clk_disable;
25652562
}
25662563

25672564
/* Vote for maximum clock rate for maximum performance */
@@ -2587,7 +2584,7 @@ static int sdhci_msm_probe(struct platform_device *pdev)
25872584
ret = clk_bulk_prepare_enable(ARRAY_SIZE(msm_host->bulk_clks),
25882585
msm_host->bulk_clks);
25892586
if (ret)
2590-
goto opp_cleanup;
2587+
goto bus_clk_disable;
25912588

25922589
/*
25932590
* xo clock is needed for FLL feature of cm_dll.
@@ -2732,10 +2729,6 @@ static int sdhci_msm_probe(struct platform_device *pdev)
27322729
clk_disable:
27332730
clk_bulk_disable_unprepare(ARRAY_SIZE(msm_host->bulk_clks),
27342731
msm_host->bulk_clks);
2735-
opp_cleanup:
2736-
dev_pm_opp_of_remove_table(&pdev->dev);
2737-
opp_put_clkname:
2738-
dev_pm_opp_put_clkname(msm_host->opp_table);
27392732
bus_clk_disable:
27402733
if (!IS_ERR(msm_host->bus_clk))
27412734
clk_disable_unprepare(msm_host->bus_clk);
@@ -2754,8 +2747,6 @@ static int sdhci_msm_remove(struct platform_device *pdev)
27542747

27552748
sdhci_remove_host(host, dead);
27562749

2757-
dev_pm_opp_of_remove_table(&pdev->dev);
2758-
dev_pm_opp_put_clkname(msm_host->opp_table);
27592750
pm_runtime_get_sync(&pdev->dev);
27602751
pm_runtime_disable(&pdev->dev);
27612752
pm_runtime_put_noidle(&pdev->dev);

0 commit comments

Comments
 (0)