Lines Matching refs:path
155 struct icc_path *path; in path_init() local
158 path = kzalloc(struct_size(path, reqs, num_nodes), GFP_KERNEL); in path_init()
159 if (!path) in path_init()
162 path->num_nodes = num_nodes; in path_init()
166 hlist_add_head(&path->reqs[i].req_node, &node->req_list); in path_init()
167 path->reqs[i].node = node; in path_init()
168 path->reqs[i].dev = dev; in path_init()
169 path->reqs[i].enabled = true; in path_init()
174 return path; in path_init()
180 struct icc_path *path = ERR_PTR(-EPROBE_DEFER); in path_find() local
207 path = ERR_PTR(-ENOENT); in path_find()
238 path = path_init(dev, dst, depth); in path_find()
240 return path; in path_find()
283 static int apply_constraints(struct icc_path *path) in apply_constraints() argument
290 for (i = 0; i < path->num_nodes; i++) { in apply_constraints()
291 next = path->reqs[i].node; in apply_constraints()
407 struct icc_path **ptr, *path; in devm_of_icc_get() local
413 path = of_icc_get(dev, name); in devm_of_icc_get()
414 if (!IS_ERR(path)) { in devm_of_icc_get()
415 *ptr = path; in devm_of_icc_get()
421 return path; in devm_of_icc_get()
442 struct icc_path *path; in of_icc_get_by_index() local
497 path = path_find(dev, src_data->node, dst_data->node); in of_icc_get_by_index()
499 if (IS_ERR(path)) { in of_icc_get_by_index()
500 dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path)); in of_icc_get_by_index()
505 icc_set_tag(path, src_data->tag); in of_icc_get_by_index()
507 path->name = kasprintf(GFP_KERNEL, "%s-%s", in of_icc_get_by_index()
509 if (!path->name) { in of_icc_get_by_index()
510 kfree(path); in of_icc_get_by_index()
511 path = ERR_PTR(-ENOMEM); in of_icc_get_by_index()
517 return path; in of_icc_get_by_index()
576 void icc_set_tag(struct icc_path *path, u32 tag) in icc_set_tag() argument
580 if (!path) in icc_set_tag()
585 for (i = 0; i < path->num_nodes; i++) in icc_set_tag()
586 path->reqs[i].tag = tag; in icc_set_tag()
601 const char *icc_get_name(struct icc_path *path) in icc_get_name() argument
603 if (!path) in icc_get_name()
606 return path->name; in icc_get_name()
625 int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw) in icc_set_bw() argument
632 if (!path) in icc_set_bw()
635 if (WARN_ON(IS_ERR(path) || !path->num_nodes)) in icc_set_bw()
640 old_avg = path->reqs[0].avg_bw; in icc_set_bw()
641 old_peak = path->reqs[0].peak_bw; in icc_set_bw()
643 for (i = 0; i < path->num_nodes; i++) { in icc_set_bw()
644 node = path->reqs[i].node; in icc_set_bw()
647 path->reqs[i].avg_bw = avg_bw; in icc_set_bw()
648 path->reqs[i].peak_bw = peak_bw; in icc_set_bw()
653 trace_icc_set_bw(path, node, i, avg_bw, peak_bw); in icc_set_bw()
656 ret = apply_constraints(path); in icc_set_bw()
661 for (i = 0; i < path->num_nodes; i++) { in icc_set_bw()
662 node = path->reqs[i].node; in icc_set_bw()
663 path->reqs[i].avg_bw = old_avg; in icc_set_bw()
664 path->reqs[i].peak_bw = old_peak; in icc_set_bw()
667 apply_constraints(path); in icc_set_bw()
672 trace_icc_set_bw_end(path, ret); in icc_set_bw()
678 static int __icc_enable(struct icc_path *path, bool enable) in __icc_enable() argument
682 if (!path) in __icc_enable()
685 if (WARN_ON(IS_ERR(path) || !path->num_nodes)) in __icc_enable()
690 for (i = 0; i < path->num_nodes; i++) in __icc_enable()
691 path->reqs[i].enabled = enable; in __icc_enable()
695 return icc_set_bw(path, path->reqs[0].avg_bw, in __icc_enable()
696 path->reqs[0].peak_bw); in __icc_enable()
699 int icc_enable(struct icc_path *path) in icc_enable() argument
701 return __icc_enable(path, true); in icc_enable()
705 int icc_disable(struct icc_path *path) in icc_disable() argument
707 return __icc_enable(path, false); in icc_disable()
730 struct icc_path *path = ERR_PTR(-EPROBE_DEFER); in icc_get() local
742 path = path_find(dev, src, dst); in icc_get()
743 if (IS_ERR(path)) { in icc_get()
744 dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path)); in icc_get()
748 path->name = kasprintf(GFP_KERNEL, "%s-%s", src->name, dst->name); in icc_get()
749 if (!path->name) { in icc_get()
750 kfree(path); in icc_get()
751 path = ERR_PTR(-ENOMEM); in icc_get()
755 return path; in icc_get()
766 void icc_put(struct icc_path *path) in icc_put() argument
772 if (!path || WARN_ON(IS_ERR(path))) in icc_put()
775 ret = icc_set_bw(path, 0, 0); in icc_put()
780 for (i = 0; i < path->num_nodes; i++) { in icc_put()
781 node = path->reqs[i].node; in icc_put()
782 hlist_del(&path->reqs[i].req_node); in icc_put()
788 kfree_const(path->name); in icc_put()
789 kfree(path); in icc_put()