Lines Matching refs:node
47 seq_puts(s, " node tag avg peak\n");
169 struct icc_node *node = dst;
180 node->provider->users++;
181 hlist_add_head(&path->reqs[i].req_node, &node->req_list);
182 path->reqs[i].node = node;
185 /* reference to previous node was saved during path traversal */
186 node = node->reverse;
196 struct icc_node *n, *node = NULL;
211 list_for_each_entry_safe(node, n, &traverse_list, search_list) {
212 if (node == dst) {
218 for (i = 0; i < node->num_links; i++) {
219 struct icc_node *tmp = node->links[i];
230 tmp->reverse = node;
260 * bandwidth requirements from each consumer are aggregated at each node.
265 static int aggregate_requests(struct icc_node *node)
267 struct icc_provider *p = node->provider;
271 node->avg_bw = 0;
272 node->peak_bw = 0;
275 p->pre_aggregate(node);
277 hlist_for_each_entry(r, &node->req_list, req_node) {
285 p->aggregate(node, r->tag, avg_bw, peak_bw,
286 &node->avg_bw, &node->peak_bw);
290 node->avg_bw = max(node->avg_bw, node->init_avg);
291 node->peak_bw = max(node->peak_bw, node->init_peak);
306 next = path->reqs[i].node;
326 int icc_std_aggregate(struct icc_node *node, u32 tag, u32 avg_bw,
337 * @spec: OF phandle args to map into an interconnect node.
341 * interconnect providers that have one device tree node and provide
362 * of_icc_get_from_provider() - Look-up interconnect node
365 * Looks for interconnect provider under the node specified by @spec and if
366 * found, uses xlate function of the provider to map phandle args to node.
373 struct icc_node *node = ERR_PTR(-EPROBE_DEFER);
386 node = data->node;
390 node = provider->xlate(spec, provider->data);
391 if (!IS_ERR(node))
398 if (!node)
401 if (IS_ERR(node))
402 return ERR_CAST(node);
408 data->node = node;
441 * of_icc_get_by_index() - get a path handle from a DT node based on index
469 * When the consumer DT node do not have "interconnects" property
499 dev_err_probe(dev, PTR_ERR(src_data), "error finding src node\n");
506 dev_err_probe(dev, PTR_ERR(dst_data), "error finding dst node\n");
512 path = path_find(dev, src_data->node, dst_data->node);
523 src_data->node->name, dst_data->node->name);
537 * of_icc_get() - get a path handle from a DT node based on name
562 * When the consumer DT node do not have "interconnects" property
586 * @src: source node name
587 * @dst: destination node name
681 * The requests are aggregated and each node is updated accordingly. The entire
690 struct icc_node *node;
707 node = path->reqs[i].node;
713 /* aggregate requests for this node */
714 aggregate_requests(node);
716 trace_icc_set_bw(path, node, i, avg_bw, peak_bw);
725 node = path->reqs[i].node;
728 aggregate_requests(node);
783 struct icc_node *node;
796 node = path->reqs[i].node;
798 if (!WARN_ON(!node->provider->users))
799 node->provider->users--;
810 struct icc_node *node;
812 /* check if node already exists */
813 node = node_find(id);
814 if (node)
815 return node;
817 node = kzalloc(sizeof(*node), GFP_KERNEL);
818 if (!node)
821 id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL);
824 kfree(node);
828 node->id = id;
830 return node;
834 * icc_node_create() - create a node
835 * @id: node id
841 struct icc_node *node;
845 node = icc_node_create_nolock(id);
849 return node;
854 * icc_node_destroy() - destroy a node
855 * @id: node id
859 struct icc_node *node;
863 node = node_find(id);
864 if (node) {
865 idr_remove(&icc_idr, node->id);
866 WARN_ON(!hlist_empty(&node->req_list));
871 if (!node)
874 kfree(node->links);
875 kfree(node);
881 * @node: source node id
882 * @dst_id: destination node id
885 * interconnect providers and the @dst_id node might not exist (if the
886 * provider driver has not probed yet). So just create the @dst_id node
887 * and when the actual provider driver is probed, the rest of the node
892 int icc_link_create(struct icc_node *node, const int dst_id)
898 if (!node->provider)
913 new = krealloc(node->links,
914 (node->num_links + 1) * sizeof(*node->links),
921 node->links = new;
922 node->links[node->num_links++] = dst;
932 * icc_node_add() - add interconnect node to interconnect provider
933 * @node: pointer to the interconnect node
936 void icc_node_add(struct icc_node *node, struct icc_provider *provider)
938 if (WARN_ON(node->provider))
944 node->provider = provider;
945 list_add_tail(&node->node_list, &provider->nodes);
949 provider->get_bw(node, &node->init_avg, &node->init_peak);
951 node->init_avg = INT_MAX;
952 node->init_peak = INT_MAX;
954 node->avg_bw = node->init_avg;
955 node->peak_bw = node->init_peak;
957 if (node->avg_bw || node->peak_bw) {
959 provider->pre_aggregate(node);
962 provider->aggregate(node, 0, node->init_avg, node->init_peak,
963 &node->avg_bw, &node->peak_bw);
965 provider->set(node, node);
968 node->avg_bw = 0;
969 node->peak_bw = 0;
977 * icc_node_del() - delete interconnect node from interconnect provider
978 * @node: pointer to the interconnect node
980 void icc_node_del(struct icc_node *node)
984 list_del(&node->node_list);