Lines Matching refs:opp

126 unsigned long dev_pm_opp_get_bw(struct dev_pm_opp *opp, bool peak, int index)  in dev_pm_opp_get_bw()  argument
128 if (IS_ERR_OR_NULL(opp)) { in dev_pm_opp_get_bw()
133 if (index >= opp->opp_table->path_count) in dev_pm_opp_get_bw()
136 if (!opp->bandwidth) in dev_pm_opp_get_bw()
139 return peak ? opp->bandwidth[index].peak : opp->bandwidth[index].avg; in dev_pm_opp_get_bw()
152 unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) in dev_pm_opp_get_voltage() argument
154 if (IS_ERR_OR_NULL(opp)) { in dev_pm_opp_get_voltage()
159 return opp->supplies[0].u_volt; in dev_pm_opp_get_voltage()
174 int dev_pm_opp_get_supplies(struct dev_pm_opp *opp, in dev_pm_opp_get_supplies() argument
177 if (IS_ERR_OR_NULL(opp) || !supplies) { in dev_pm_opp_get_supplies()
182 memcpy(supplies, opp->supplies, in dev_pm_opp_get_supplies()
183 sizeof(*supplies) * opp->opp_table->regulator_count); in dev_pm_opp_get_supplies()
197 unsigned long dev_pm_opp_get_power(struct dev_pm_opp *opp) in dev_pm_opp_get_power() argument
202 if (IS_ERR_OR_NULL(opp)) { in dev_pm_opp_get_power()
206 for (i = 0; i < opp->opp_table->regulator_count; i++) in dev_pm_opp_get_power()
207 opp_power += opp->supplies[i].u_watt; in dev_pm_opp_get_power()
222 unsigned long dev_pm_opp_get_freq_indexed(struct dev_pm_opp *opp, u32 index) in dev_pm_opp_get_freq_indexed() argument
224 if (IS_ERR_OR_NULL(opp) || index >= opp->opp_table->clk_count) { in dev_pm_opp_get_freq_indexed()
229 return opp->rates[index]; in dev_pm_opp_get_freq_indexed()
240 unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp) in dev_pm_opp_get_level() argument
242 if (IS_ERR_OR_NULL(opp) || !opp->available) { in dev_pm_opp_get_level()
247 return opp->level; in dev_pm_opp_get_level()
260 unsigned int dev_pm_opp_get_required_pstate(struct dev_pm_opp *opp, in dev_pm_opp_get_required_pstate() argument
263 if (IS_ERR_OR_NULL(opp) || !opp->available || in dev_pm_opp_get_required_pstate()
264 index >= opp->opp_table->required_opp_count) { in dev_pm_opp_get_required_pstate()
270 if (lazy_linking_pending(opp->opp_table)) in dev_pm_opp_get_required_pstate()
274 if (unlikely(!opp->opp_table->required_opp_tables[index]->is_genpd)) { in dev_pm_opp_get_required_pstate()
279 return opp->required_opps[index]->level; in dev_pm_opp_get_required_pstate()
293 bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) in dev_pm_opp_is_turbo() argument
295 if (IS_ERR_OR_NULL(opp) || !opp->available) { in dev_pm_opp_is_turbo()
300 return opp->turbo; in dev_pm_opp_is_turbo()
331 struct dev_pm_opp *opp; in dev_pm_opp_get_max_volt_latency() local
359 list_for_each_entry(opp, &opp_table->opp_list, node) { in dev_pm_opp_get_max_volt_latency()
360 if (!opp->available) in dev_pm_opp_get_max_volt_latency()
363 if (opp->supplies[i].u_volt_min < uV[i].min) in dev_pm_opp_get_max_volt_latency()
364 uV[i].min = opp->supplies[i].u_volt_min; in dev_pm_opp_get_max_volt_latency()
365 if (opp->supplies[i].u_volt_max > uV[i].max) in dev_pm_opp_get_max_volt_latency()
366 uV[i].max = opp->supplies[i].u_volt_max; in dev_pm_opp_get_max_volt_latency()
428 struct dev_pm_opp *opp; in _get_opp_count() local
433 list_for_each_entry(opp, &opp_table->opp_list, node) { in _get_opp_count()
434 if (opp->available) in _get_opp_count()
464 static unsigned long _read_freq(struct dev_pm_opp *opp, int index) in _read_freq() argument
466 return opp->rates[index]; in _read_freq()
469 static unsigned long _read_level(struct dev_pm_opp *opp, int index) in _read_level() argument
471 return opp->level; in _read_level()
474 static unsigned long _read_bw(struct dev_pm_opp *opp, int index) in _read_bw() argument
476 return opp->bandwidth[index].peak; in _read_bw()
480 static bool _compare_exact(struct dev_pm_opp **opp, struct dev_pm_opp *temp_opp, in _compare_exact() argument
484 *opp = temp_opp; in _compare_exact()
491 static bool _compare_ceil(struct dev_pm_opp **opp, struct dev_pm_opp *temp_opp, in _compare_ceil() argument
495 *opp = temp_opp; in _compare_ceil()
502 static bool _compare_floor(struct dev_pm_opp **opp, struct dev_pm_opp *temp_opp, in _compare_floor() argument
508 *opp = temp_opp; in _compare_floor()
515 unsigned long (*read)(struct dev_pm_opp *opp, int index), in _opp_table_find_key() argument
516 bool (*compare)(struct dev_pm_opp **opp, struct dev_pm_opp *temp_opp, in _opp_table_find_key() argument
520 struct dev_pm_opp *temp_opp, *opp = ERR_PTR(-ERANGE); in _opp_table_find_key() local
530 if (compare(&opp, temp_opp, read(temp_opp, index), *key)) in _opp_table_find_key()
536 if (!IS_ERR(opp)) { in _opp_table_find_key()
537 *key = read(opp, index); in _opp_table_find_key()
538 dev_pm_opp_get(opp); in _opp_table_find_key()
541 return opp; in _opp_table_find_key()
546 unsigned long (*read)(struct dev_pm_opp *opp, int index), in _find_key() argument
547 bool (*compare)(struct dev_pm_opp **opp, struct dev_pm_opp *temp_opp, in _find_key() argument
566 unsigned long (*read)(struct dev_pm_opp *opp, int index), in _find_key_exact() argument
579 unsigned long (*read)(struct dev_pm_opp *opp, int index), in _opp_table_find_key_ceil() argument
588 unsigned long (*read)(struct dev_pm_opp *opp, int index), in _find_key_ceil() argument
597 unsigned long (*read)(struct dev_pm_opp *opp, int index), in _find_key_floor() argument
819 struct dev_pm_opp *opp; in dev_pm_opp_find_level_ceil() local
821 opp = _find_key_ceil(dev, &temp, 0, true, _read_level, NULL); in dev_pm_opp_find_level_ceil()
822 if (IS_ERR(opp)) in dev_pm_opp_find_level_ceil()
823 return opp; in dev_pm_opp_find_level_ceil()
828 dev_pm_opp_put(opp); in dev_pm_opp_find_level_ceil()
833 return opp; in dev_pm_opp_find_level_ceil()
859 struct dev_pm_opp *opp; in dev_pm_opp_find_level_floor() local
861 opp = _find_key_floor(dev, &temp, 0, true, _read_level, NULL); in dev_pm_opp_find_level_floor()
863 return opp; in dev_pm_opp_find_level_floor()
890 struct dev_pm_opp *opp; in dev_pm_opp_find_bw_ceil() local
892 opp = _find_key_ceil(dev, &temp, index, true, _read_bw, in dev_pm_opp_find_bw_ceil()
895 return opp; in dev_pm_opp_find_bw_ceil()
922 struct dev_pm_opp *opp; in dev_pm_opp_find_bw_floor() local
924 opp = _find_key_floor(dev, &temp, index, true, _read_bw, in dev_pm_opp_find_bw_floor()
927 return opp; in dev_pm_opp_find_bw_floor()
958 struct dev_pm_opp *opp, void *data, bool scaling_down) in _opp_config_clk_single() argument
967 } else if (opp) { in _opp_config_clk_single()
968 freq = opp->rates[0]; in _opp_config_clk_single()
990 struct opp_table *opp_table, struct dev_pm_opp *opp, void *data, in dev_pm_opp_config_clks_simple() argument
997 ret = clk_set_rate(opp_table->clks[i], opp->rates[i]); in dev_pm_opp_config_clks_simple()
1006 ret = clk_set_rate(opp_table->clks[i], opp->rates[i]); in dev_pm_opp_config_clks_simple()
1050 struct dev_pm_opp *opp, struct device *dev) in _set_opp_bw() argument
1059 if (!opp) { in _set_opp_bw()
1063 avg = opp->bandwidth[i].avg; in _set_opp_bw()
1064 peak = opp->bandwidth[i].peak; in _set_opp_bw()
1069 opp ? "set" : "remove", i, ret); in _set_opp_bw()
1077 static int _set_opp_level(struct device *dev, struct dev_pm_opp *opp) in _set_opp_level() argument
1082 if (opp) { in _set_opp_level()
1083 if (opp->level == OPP_LEVEL_UNSET) in _set_opp_level()
1086 level = opp->level; in _set_opp_level()
1100 struct dev_pm_opp *opp, bool up) in _set_required_opps() argument
1126 required_opp = opp ? opp->required_opps[index] : NULL; in _set_required_opps()
1141 struct dev_pm_opp *opp = ERR_PTR(-ENODEV); in _find_current_opp() local
1146 opp = _find_freq_ceil(opp_table, &freq); in _find_current_opp()
1154 if (IS_ERR(opp)) { in _find_current_opp()
1156 opp = dev_pm_opp_get(list_first_entry(&opp_table->opp_list, in _find_current_opp()
1160 opp_table->current_opp = opp; in _find_current_opp()
1197 struct dev_pm_opp *opp, void *clk_data, bool forced) in _set_opp() argument
1202 if (unlikely(!opp)) in _set_opp()
1212 if (!forced && old_opp == opp && opp_table->enabled) { in _set_opp()
1218 __func__, old_opp->rates[0], opp->rates[0], old_opp->level, in _set_opp()
1219 opp->level, old_opp->bandwidth ? old_opp->bandwidth[0].peak : 0, in _set_opp()
1220 opp->bandwidth ? opp->bandwidth[0].peak : 0); in _set_opp()
1222 scaling_down = _opp_compare_key(opp_table, old_opp, opp); in _set_opp()
1228 ret = _set_required_opps(dev, opp_table, opp, true); in _set_opp()
1234 ret = _set_opp_level(dev, opp); in _set_opp()
1238 ret = _set_opp_bw(opp_table, opp, dev); in _set_opp()
1245 ret = opp_table->config_regulators(dev, old_opp, opp, in _set_opp()
1257 ret = opp_table->config_clks(dev, opp_table, opp, clk_data, scaling_down); in _set_opp()
1265 ret = opp_table->config_regulators(dev, old_opp, opp, in _set_opp()
1275 ret = _set_opp_bw(opp_table, opp, dev); in _set_opp()
1281 ret = _set_opp_level(dev, opp); in _set_opp()
1285 ret = _set_required_opps(dev, opp_table, opp, false); in _set_opp()
1296 opp_table->current_opp = dev_pm_opp_get(opp); in _set_opp()
1315 struct dev_pm_opp *opp __free(put_opp) = NULL; in dev_pm_opp_set_rate()
1348 opp = _find_freq_ceil(opp_table, &temp_freq); in dev_pm_opp_set_rate()
1349 if (IS_ERR(opp)) { in dev_pm_opp_set_rate()
1351 __func__, freq, PTR_ERR(opp)); in dev_pm_opp_set_rate()
1352 return PTR_ERR(opp); in dev_pm_opp_set_rate()
1365 return _set_opp(dev, opp_table, opp, &freq, forced); in dev_pm_opp_set_rate()
1379 int dev_pm_opp_set_opp(struct device *dev, struct dev_pm_opp *opp) in dev_pm_opp_set_opp() argument
1389 return _set_opp(dev, opp_table, opp, NULL, false); in dev_pm_opp_set_opp()
1653 void _opp_free(struct dev_pm_opp *opp) in _opp_free() argument
1655 kfree(opp); in _opp_free()
1660 struct dev_pm_opp *opp = container_of(kref, struct dev_pm_opp, kref); in _opp_kref_release() local
1661 struct opp_table *opp_table = opp->opp_table; in _opp_kref_release()
1663 list_del(&opp->node); in _opp_kref_release()
1670 blocking_notifier_call_chain(&opp_table->head, OPP_EVENT_REMOVE, opp); in _opp_kref_release()
1671 _of_clear_opp(opp_table, opp); in _opp_kref_release()
1672 opp_debug_remove_one(opp); in _opp_kref_release()
1673 kfree(opp); in _opp_kref_release()
1676 struct dev_pm_opp *dev_pm_opp_get(struct dev_pm_opp *opp) in dev_pm_opp_get() argument
1678 kref_get(&opp->kref); in dev_pm_opp_get()
1679 return opp; in dev_pm_opp_get()
1683 void dev_pm_opp_put(struct dev_pm_opp *opp) in dev_pm_opp_put() argument
1685 kref_put_mutex(&opp->kref, _opp_kref_release, &opp->opp_table->lock); in dev_pm_opp_put()
1699 struct dev_pm_opp *opp = NULL, *iter; in dev_pm_opp_remove() local
1711 opp = iter; in dev_pm_opp_remove()
1717 if (opp) { in dev_pm_opp_remove()
1718 dev_pm_opp_put(opp); in dev_pm_opp_remove()
1732 struct dev_pm_opp *opp; in _opp_get_next() local
1736 list_for_each_entry(opp, &opp_table->opp_list, node) { in _opp_get_next()
1741 if (!opp->removed && dynamic == opp->dynamic) in _opp_get_next()
1742 return opp; in _opp_get_next()
1755 struct dev_pm_opp *opp; in _opp_remove_all() local
1757 while ((opp = _opp_get_next(opp_table, dynamic))) { in _opp_remove_all()
1758 opp->removed = true; in _opp_remove_all()
1759 dev_pm_opp_put(opp); in _opp_remove_all()
1801 struct dev_pm_opp *opp; in _opp_allocate() local
1807 supply_size = sizeof(*opp->supplies) * supply_count; in _opp_allocate()
1808 clk_size = sizeof(*opp->rates) * opp_table->clk_count; in _opp_allocate()
1809 icc_size = sizeof(*opp->bandwidth) * opp_table->path_count; in _opp_allocate()
1812 opp = kzalloc(sizeof(*opp) + supply_size + clk_size + icc_size, GFP_KERNEL); in _opp_allocate()
1813 if (!opp) in _opp_allocate()
1817 opp->supplies = (struct dev_pm_opp_supply *)(opp + 1); in _opp_allocate()
1819 opp->rates = (unsigned long *)(opp->supplies + supply_count); in _opp_allocate()
1822 opp->bandwidth = (struct dev_pm_opp_icc_bw *)(opp->rates + opp_table->clk_count); in _opp_allocate()
1824 INIT_LIST_HEAD(&opp->node); in _opp_allocate()
1826 opp->level = OPP_LEVEL_UNSET; in _opp_allocate()
1828 return opp; in _opp_allocate()
1831 static bool _opp_supported_by_regulators(struct dev_pm_opp *opp, in _opp_supported_by_regulators() argument
1844 opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1845 opp->supplies[i].u_volt_max)) { in _opp_supported_by_regulators()
1847 __func__, opp->supplies[i].u_volt_min, in _opp_supported_by_regulators()
1848 opp->supplies[i].u_volt_max); in _opp_supported_by_regulators()
1914 struct dev_pm_opp *opp; in _opp_is_duplicate() local
1925 list_for_each_entry(opp, &opp_table->opp_list, node) { in _opp_is_duplicate()
1926 opp_cmp = _opp_compare_key(opp_table, new_opp, opp); in _opp_is_duplicate()
1928 *head = &opp->node; in _opp_is_duplicate()
1937 __func__, opp->rates[0], opp->supplies[0].u_volt, in _opp_is_duplicate()
1938 opp->available, new_opp->rates[0], in _opp_is_duplicate()
1942 return opp->available && in _opp_is_duplicate()
1943 new_opp->supplies[0].u_volt == opp->supplies[0].u_volt ? -EBUSY : -EEXIST; in _opp_is_duplicate()
1949 void _required_opps_available(struct dev_pm_opp *opp, int count) in _required_opps_available() argument
1954 if (opp->required_opps[i]->available) in _required_opps_available()
1957 opp->available = false; in _required_opps_available()
1959 __func__, opp->required_opps[i]->np, opp->rates[0]); in _required_opps_available()
2623 struct dev_pm_opp *opp, *dest_opp = ERR_PTR(-ENODEV); in dev_pm_opp_xlate_required_opp() local
2639 list_for_each_entry(opp, &src_table->opp_list, node) { in dev_pm_opp_xlate_required_opp()
2640 if (opp == src_opp) { in dev_pm_opp_xlate_required_opp()
2641 dest_opp = dev_pm_opp_get(opp->required_opps[i]); in dev_pm_opp_xlate_required_opp()
2675 struct dev_pm_opp *opp; in dev_pm_opp_xlate_performance_state() local
2711 list_for_each_entry(opp, &src_table->opp_list, node) { in dev_pm_opp_xlate_performance_state()
2712 if (opp->level == pstate) in dev_pm_opp_xlate_performance_state()
2713 return opp->required_opps[i]->level; in dev_pm_opp_xlate_performance_state()
2774 struct dev_pm_opp *opp __free(put_opp) = ERR_PTR(-ENODEV), *tmp_opp; in _opp_set_availability()
2792 opp = dev_pm_opp_get(tmp_opp); in _opp_set_availability()
2795 if (opp->available == availability_req) in _opp_set_availability()
2798 opp->available = availability_req; in _opp_set_availability()
2804 if (IS_ERR(opp)) in _opp_set_availability()
2805 return PTR_ERR(opp); in _opp_set_availability()
2810 opp); in _opp_set_availability()
2813 OPP_EVENT_DISABLE, opp); in _opp_set_availability()
2835 struct dev_pm_opp *opp __free(put_opp) = ERR_PTR(-ENODEV), *tmp_opp; in dev_pm_opp_adjust_voltage()
2854 opp = dev_pm_opp_get(tmp_opp); in dev_pm_opp_adjust_voltage()
2857 if (opp->supplies->u_volt == u_volt) in dev_pm_opp_adjust_voltage()
2860 opp->supplies->u_volt = u_volt; in dev_pm_opp_adjust_voltage()
2861 opp->supplies->u_volt_min = u_volt_min; in dev_pm_opp_adjust_voltage()
2862 opp->supplies->u_volt_max = u_volt_max; in dev_pm_opp_adjust_voltage()
2869 if (IS_ERR(opp)) in dev_pm_opp_adjust_voltage()
2870 return PTR_ERR(opp); in dev_pm_opp_adjust_voltage()
2874 opp); in dev_pm_opp_adjust_voltage()