Lines Matching refs:node
47 seq_puts(s, " node tag avg peak\n");
154 struct icc_node *node = dst;
165 node->provider->users++;
166 hlist_add_head(&path->reqs[i].req_node, &node->req_list);
167 path->reqs[i].node = node;
170 /* reference to previous node was saved during path traversal */
171 node = node->reverse;
181 struct icc_node *n, *node = NULL;
196 list_for_each_entry_safe(node, n, &traverse_list, search_list) {
197 if (node == dst) {
203 for (i = 0; i < node->num_links; i++) {
204 struct icc_node *tmp = node->links[i];
215 tmp->reverse = node;
245 * bandwidth requirements from each consumer are aggregated at each node.
250 static int aggregate_requests(struct icc_node *node)
252 struct icc_provider *p = node->provider;
256 node->avg_bw = 0;
257 node->peak_bw = 0;
260 p->pre_aggregate(node);
262 hlist_for_each_entry(r, &node->req_list, req_node) {
270 p->aggregate(node, r->tag, avg_bw, peak_bw,
271 &node->avg_bw, &node->peak_bw);
275 node->avg_bw = max(node->avg_bw, node->init_avg);
276 node->peak_bw = max(node->peak_bw, node->init_peak);
291 next = path->reqs[i].node;
311 int icc_std_aggregate(struct icc_node *node, u32 tag, u32 avg_bw,
322 * @spec: OF phandle args to map into an interconnect node.
326 * interconnect providers that have one device tree node and provide
347 * of_icc_get_from_provider() - Look-up interconnect node
350 * Looks for interconnect provider under the node specified by @spec and if
351 * found, uses xlate function of the provider to map phandle args to node.
358 struct icc_node *node = ERR_PTR(-EPROBE_DEFER);
371 node = data->node;
375 node = provider->xlate(spec, provider->data);
376 if (!IS_ERR(node))
383 if (!node)
386 if (IS_ERR(node))
387 return ERR_CAST(node);
393 data->node = node;
426 * of_icc_get_by_index() - get a path handle from a DT node based on index
454 * When the consumer DT node do not have "interconnects" property
484 dev_err_probe(dev, PTR_ERR(src_data), "error finding src node\n");
491 dev_err_probe(dev, PTR_ERR(dst_data), "error finding dst node\n");
497 path = path_find(dev, src_data->node, dst_data->node);
508 src_data->node->name, dst_data->node->name);
522 * of_icc_get() - get a path handle from a DT node based on name
547 * When the consumer DT node do not have "interconnects" property
618 * The requests are aggregated and each node is updated accordingly. The entire
627 struct icc_node *node;
644 node = path->reqs[i].node;
650 /* aggregate requests for this node */
651 aggregate_requests(node);
653 trace_icc_set_bw(path, node, i, avg_bw, peak_bw);
662 node = path->reqs[i].node;
665 aggregate_requests(node);
768 struct icc_node *node;
781 node = path->reqs[i].node;
783 if (!WARN_ON(!node->provider->users))
784 node->provider->users--;
795 struct icc_node *node;
797 /* check if node already exists */
798 node = node_find(id);
799 if (node)
800 return node;
802 node = kzalloc(sizeof(*node), GFP_KERNEL);
803 if (!node)
806 id = idr_alloc(&icc_idr, node, id, id + 1, GFP_KERNEL);
809 kfree(node);
813 node->id = id;
815 return node;
819 * icc_node_create() - create a node
820 * @id: node id
826 struct icc_node *node;
830 node = icc_node_create_nolock(id);
834 return node;
839 * icc_node_destroy() - destroy a node
840 * @id: node id
844 struct icc_node *node;
848 node = node_find(id);
849 if (node) {
850 idr_remove(&icc_idr, node->id);
851 WARN_ON(!hlist_empty(&node->req_list));
856 if (!node)
859 kfree(node->links);
860 kfree(node);
866 * @node: source node id
867 * @dst_id: destination node id
870 * interconnect providers and the @dst_id node might not exist (if the
871 * provider driver has not probed yet). So just create the @dst_id node
872 * and when the actual provider driver is probed, the rest of the node
877 int icc_link_create(struct icc_node *node, const int dst_id)
883 if (!node->provider)
898 new = krealloc(node->links,
899 (node->num_links + 1) * sizeof(*node->links),
906 node->links = new;
907 node->links[node->num_links++] = dst;
918 * @src: pointer to source node
919 * @dst: pointer to destination node
963 * icc_node_add() - add interconnect node to interconnect provider
964 * @node: pointer to the interconnect node
967 void icc_node_add(struct icc_node *node, struct icc_provider *provider)
971 node->provider = provider;
972 list_add_tail(&node->node_list, &provider->nodes);
976 provider->get_bw(node, &node->init_avg, &node->init_peak);
978 node->init_avg = INT_MAX;
979 node->init_peak = INT_MAX;
981 node->avg_bw = node->init_avg;
982 node->peak_bw = node->init_peak;
985 provider->pre_aggregate(node);
988 provider->aggregate(node, 0, node->init_avg, node->init_peak,
989 &node->avg_bw, &node->peak_bw);
991 provider->set(node, node);
992 node->avg_bw = 0;
993 node->peak_bw = 0;
1000 * icc_node_del() - delete interconnect node from interconnect provider
1001 * @node: pointer to the interconnect node
1003 void icc_node_del(struct icc_node *node)
1007 list_del(&node->node_list);