Lines Matching +full:external +full:- +full:nodes

1 // SPDX-License-Identifier: GPL-2.0
3 * MediaTek External Memory Interface (EMI) Interconnect driver
11 #include <linux/interconnect-provider.h>
18 #include "icc-emi.h"
23 struct mtk_icc_node *in = node->data; in mtk_emi_icc_aggregate()
28 in->sum_avg = *agg_avg; in mtk_emi_icc_aggregate()
29 in->max_peak = *agg_peak; in mtk_emi_icc_aggregate()
36 struct mtk_icc_node *node = dst->data; in mtk_emi_icc_set()
40 if (unlikely(!src->provider)) in mtk_emi_icc_set()
41 return -EINVAL; in mtk_emi_icc_set()
43 dev = src->provider->dev; in mtk_emi_icc_set()
45 switch (node->ep) { in mtk_emi_icc_set()
49 ret = mtk_dvfsrc_send_request(dev, MTK_DVFSRC_CMD_PEAK_BW, node->max_peak); in mtk_emi_icc_set()
55 ret = mtk_dvfsrc_send_request(dev, MTK_DVFSRC_CMD_BW, node->sum_avg); in mtk_emi_icc_set()
62 ret = mtk_dvfsrc_send_request(dev, MTK_DVFSRC_CMD_HRT_BW, node->sum_avg); in mtk_emi_icc_set()
69 dev_err(src->provider->dev, "Unknown endpoint %u\n", node->ep); in mtk_emi_icc_set()
70 return -EINVAL; in mtk_emi_icc_set()
79 struct device *dev = &pdev->dev; in mtk_emi_icc_probe()
88 return -EINVAL; in mtk_emi_icc_probe()
90 mnodes = desc->nodes; in mtk_emi_icc_probe()
94 return -ENOMEM; in mtk_emi_icc_probe()
96 data = devm_kzalloc(dev, struct_size(data, nodes, desc->num_nodes), GFP_KERNEL); in mtk_emi_icc_probe()
98 return -ENOMEM; in mtk_emi_icc_probe()
100 provider->dev = pdev->dev.parent; in mtk_emi_icc_probe()
101 provider->set = mtk_emi_icc_set; in mtk_emi_icc_probe()
102 provider->aggregate = mtk_emi_icc_aggregate; in mtk_emi_icc_probe()
103 provider->xlate = of_icc_xlate_onecell; in mtk_emi_icc_probe()
104 INIT_LIST_HEAD(&provider->nodes); in mtk_emi_icc_probe()
105 provider->data = data; in mtk_emi_icc_probe()
107 for (i = 0; i < desc->num_nodes; i++) { in mtk_emi_icc_probe()
111 node = icc_node_create(mnodes[i]->id); in mtk_emi_icc_probe()
117 node->name = mnodes[i]->name; in mtk_emi_icc_probe()
118 node->data = mnodes[i]; in mtk_emi_icc_probe()
121 for (j = 0; j < mnodes[i]->num_links; j++) in mtk_emi_icc_probe()
122 icc_link_create(node, mnodes[i]->links[j]); in mtk_emi_icc_probe()
124 data->nodes[i] = node; in mtk_emi_icc_probe()
126 data->num_nodes = desc->num_nodes; in mtk_emi_icc_probe()
152 MODULE_DESCRIPTION("MediaTek External Memory Interface interconnect driver");