Lines Matching +full:smd +full:- +full:rpm
1 // SPDX-License-Identifier: GPL-2.0
8 #include <linux/interconnect-provider.h>
16 #include "smd-rpm.h"
17 #include "icc-rpm.h"
32 qn = src->data; in qcom_icc_set()
33 provider = src->provider; in qcom_icc_set()
36 list_for_each_entry(n, &provider->nodes, node_list) in qcom_icc_set()
37 provider->aggregate(n, 0, n->avg_bw, n->peak_bw, in qcom_icc_set()
43 /* send bandwidth request message to the RPM processor */ in qcom_icc_set()
44 if (qn->mas_rpm_id != -1) { in qcom_icc_set()
47 qn->mas_rpm_id, in qcom_icc_set()
51 qn->mas_rpm_id, ret); in qcom_icc_set()
56 if (qn->slv_rpm_id != -1) { in qcom_icc_set()
59 qn->slv_rpm_id, in qcom_icc_set()
63 qn->slv_rpm_id, ret); in qcom_icc_set()
70 do_div(rate, qn->buswidth); in qcom_icc_set()
72 if (qn->rate == rate) in qcom_icc_set()
75 for (i = 0; i < qp->num_clks; i++) { in qcom_icc_set()
76 ret = clk_set_rate(qp->bus_clks[i].clk, rate); in qcom_icc_set()
79 qp->bus_clks[i].id, ret); in qcom_icc_set()
84 qn->rate = rate; in qcom_icc_set()
92 struct device *dev = &pdev->dev; in qnoc_probe()
102 /* wait for the RPM proxy */ in qnoc_probe()
104 return -EPROBE_DEFER; in qnoc_probe()
108 return -EINVAL; in qnoc_probe()
110 qnodes = desc->nodes; in qnoc_probe()
111 num_nodes = desc->num_nodes; in qnoc_probe()
115 return -ENOMEM; in qnoc_probe()
120 return -ENOMEM; in qnoc_probe()
122 qp->bus_clks = devm_kmemdup(dev, cd, cd_size, in qnoc_probe()
124 if (!qp->bus_clks) in qnoc_probe()
125 return -ENOMEM; in qnoc_probe()
127 qp->num_clks = cd_num; in qnoc_probe()
128 ret = devm_clk_bulk_get(dev, qp->num_clks, qp->bus_clks); in qnoc_probe()
132 ret = clk_bulk_prepare_enable(qp->num_clks, qp->bus_clks); in qnoc_probe()
136 provider = &qp->provider; in qnoc_probe()
137 INIT_LIST_HEAD(&provider->nodes); in qnoc_probe()
138 provider->dev = dev; in qnoc_probe()
139 provider->set = qcom_icc_set; in qnoc_probe()
140 provider->aggregate = icc_std_aggregate; in qnoc_probe()
141 provider->xlate = of_icc_xlate_onecell; in qnoc_probe()
142 provider->data = data; in qnoc_probe()
147 clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks); in qnoc_probe()
154 node = icc_node_create(qnodes[i]->id); in qnoc_probe()
160 node->name = qnodes[i]->name; in qnoc_probe()
161 node->data = qnodes[i]; in qnoc_probe()
164 for (j = 0; j < qnodes[i]->num_links; j++) in qnoc_probe()
165 icc_link_create(node, qnodes[i]->links[j]); in qnoc_probe()
167 data->nodes[i] = node; in qnoc_probe()
169 data->num_nodes = num_nodes; in qnoc_probe()
176 clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks); in qnoc_probe()
187 icc_nodes_remove(&qp->provider); in qnoc_remove()
188 clk_bulk_disable_unprepare(qp->num_clks, qp->bus_clks); in qnoc_remove()
189 return icc_provider_del(&qp->provider); in qnoc_remove()