Skip to content

Commit 83fd1e5

Browse files
committed
Merge branch 'opp/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm
Pull operating performance points (OPP) framework changes for v4.21 from Viresh Kumar. * 'opp/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm: OPP: Remove of_dev_pm_opp_find_required_opp() OPP: Rename and relocate of_genpd_opp_to_performance_state() OPP: Configure all required OPPs OPP: Add dev_pm_opp_{set|put}_genpd_virt_dev() helper PM / Domains: Add genpd_opp_to_performance_state() OPP: Populate OPPs from "required-opps" property OPP: Populate required opp tables from "required-opps" property OPP: Separate out custom OPP handler specific code OPP: Identify and mark genpd OPP tables PM / Domains: Rename genpd virtual devices as virt_dev
2 parents 40e020c + e822eac commit 83fd1e5

File tree

6 files changed

+526
-162
lines changed

6 files changed

+526
-162
lines changed

drivers/base/power/domain.c

Lines changed: 27 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2338,7 +2338,7 @@ EXPORT_SYMBOL_GPL(genpd_dev_pm_attach);
23382338
struct device *genpd_dev_pm_attach_by_id(struct device *dev,
23392339
unsigned int index)
23402340
{
2341-
struct device *genpd_dev;
2341+
struct device *virt_dev;
23422342
int num_domains;
23432343
int ret;
23442344

@@ -2352,31 +2352,31 @@ struct device *genpd_dev_pm_attach_by_id(struct device *dev,
23522352
return NULL;
23532353

23542354
/* Allocate and register device on the genpd bus. */
2355-
genpd_dev = kzalloc(sizeof(*genpd_dev), GFP_KERNEL);
2356-
if (!genpd_dev)
2355+
virt_dev = kzalloc(sizeof(*virt_dev), GFP_KERNEL);
2356+
if (!virt_dev)
23572357
return ERR_PTR(-ENOMEM);
23582358

2359-
dev_set_name(genpd_dev, "genpd:%u:%s", index, dev_name(dev));
2360-
genpd_dev->bus = &genpd_bus_type;
2361-
genpd_dev->release = genpd_release_dev;
2359+
dev_set_name(virt_dev, "genpd:%u:%s", index, dev_name(dev));
2360+
virt_dev->bus = &genpd_bus_type;
2361+
virt_dev->release = genpd_release_dev;
23622362

2363-
ret = device_register(genpd_dev);
2363+
ret = device_register(virt_dev);
23642364
if (ret) {
2365-
kfree(genpd_dev);
2365+
kfree(virt_dev);
23662366
return ERR_PTR(ret);
23672367
}
23682368

23692369
/* Try to attach the device to the PM domain at the specified index. */
2370-
ret = __genpd_dev_pm_attach(genpd_dev, dev->of_node, index, false);
2370+
ret = __genpd_dev_pm_attach(virt_dev, dev->of_node, index, false);
23712371
if (ret < 1) {
2372-
device_unregister(genpd_dev);
2372+
device_unregister(virt_dev);
23732373
return ret ? ERR_PTR(ret) : NULL;
23742374
}
23752375

2376-
pm_runtime_enable(genpd_dev);
2377-
genpd_queue_power_off_work(dev_to_genpd(genpd_dev));
2376+
pm_runtime_enable(virt_dev);
2377+
genpd_queue_power_off_work(dev_to_genpd(virt_dev));
23782378

2379-
return genpd_dev;
2379+
return virt_dev;
23802380
}
23812381
EXPORT_SYMBOL_GPL(genpd_dev_pm_attach_by_id);
23822382

@@ -2521,52 +2521,36 @@ int of_genpd_parse_idle_states(struct device_node *dn,
25212521
EXPORT_SYMBOL_GPL(of_genpd_parse_idle_states);
25222522

25232523
/**
2524-
* of_genpd_opp_to_performance_state- Gets performance state of device's
2525-
* power domain corresponding to a DT node's "required-opps" property.
2524+
* pm_genpd_opp_to_performance_state - Gets performance state of the genpd from its OPP node.
25262525
*
2527-
* @dev: Device for which the performance-state needs to be found.
2528-
* @np: DT node where the "required-opps" property is present. This can be
2529-
* the device node itself (if it doesn't have an OPP table) or a node
2530-
* within the OPP table of a device (if device has an OPP table).
2526+
* @genpd_dev: Genpd's device for which the performance-state needs to be found.
2527+
* @opp: struct dev_pm_opp of the OPP for which we need to find performance
2528+
* state.
25312529
*
2532-
* Returns performance state corresponding to the "required-opps" property of
2533-
* a DT node. This calls platform specific genpd->opp_to_performance_state()
2534-
* callback to translate power domain OPP to performance state.
2530+
* Returns performance state encoded in the OPP of the genpd. This calls
2531+
* platform specific genpd->opp_to_performance_state() callback to translate
2532+
* power domain OPP to performance state.
25352533
*
25362534
* Returns performance state on success and 0 on failure.
25372535
*/
2538-
unsigned int of_genpd_opp_to_performance_state(struct device *dev,
2539-
struct device_node *np)
2536+
unsigned int pm_genpd_opp_to_performance_state(struct device *genpd_dev,
2537+
struct dev_pm_opp *opp)
25402538
{
2541-
struct generic_pm_domain *genpd;
2542-
struct dev_pm_opp *opp;
2543-
int state = 0;
2539+
struct generic_pm_domain *genpd = NULL;
2540+
int state;
25442541

2545-
genpd = dev_to_genpd(dev);
2546-
if (IS_ERR(genpd))
2547-
return 0;
2542+
genpd = container_of(genpd_dev, struct generic_pm_domain, dev);
25482543

2549-
if (unlikely(!genpd->set_performance_state))
2544+
if (unlikely(!genpd->opp_to_performance_state))
25502545
return 0;
25512546

25522547
genpd_lock(genpd);
2553-
2554-
opp = of_dev_pm_opp_find_required_opp(&genpd->dev, np);
2555-
if (IS_ERR(opp)) {
2556-
dev_err(dev, "Failed to find required OPP: %ld\n",
2557-
PTR_ERR(opp));
2558-
goto unlock;
2559-
}
2560-
25612548
state = genpd->opp_to_performance_state(genpd, opp);
2562-
dev_pm_opp_put(opp);
2563-
2564-
unlock:
25652549
genpd_unlock(genpd);
25662550

25672551
return state;
25682552
}
2569-
EXPORT_SYMBOL_GPL(of_genpd_opp_to_performance_state);
2553+
EXPORT_SYMBOL_GPL(pm_genpd_opp_to_performance_state);
25702554

25712555
static int __init genpd_bus_init(void)
25722556
{

0 commit comments

Comments
 (0)