interconnect: qcom: sm8550: switch to qcom_icc_rpmh_* function
Change sm8550 interconnect driver to use generic qcom_icc_rpmh_*
functions rather than embedding a copy of thema. This also fixes an
overallocation of memory for icc_onecell_data structure.
Fixes: e6f0d6a30f
("interconnect: qcom: Add SM8550 interconnect provider driver")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20230105002221.1416479-4-dmitry.baryshkov@linaro.org
Signed-off-by: Georgi Djakov <djakov@kernel.org>
This commit is contained in:
parent
87e8fab191
commit
0d00cd114f
|
@ -2165,101 +2165,6 @@ static const struct qcom_icc_desc sm8550_system_noc = {
|
||||||
.num_bcms = ARRAY_SIZE(system_noc_bcms),
|
.num_bcms = ARRAY_SIZE(system_noc_bcms),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int qnoc_probe(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
const struct qcom_icc_desc *desc;
|
|
||||||
struct icc_onecell_data *data;
|
|
||||||
struct icc_provider *provider;
|
|
||||||
struct qcom_icc_node * const *qnodes;
|
|
||||||
struct qcom_icc_provider *qp;
|
|
||||||
struct icc_node *node;
|
|
||||||
size_t num_nodes, i;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
desc = device_get_match_data(&pdev->dev);
|
|
||||||
if (!desc)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
qnodes = desc->nodes;
|
|
||||||
num_nodes = desc->num_nodes;
|
|
||||||
|
|
||||||
qp = devm_kzalloc(&pdev->dev, sizeof(*qp), GFP_KERNEL);
|
|
||||||
if (!qp)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
data = devm_kcalloc(&pdev->dev, num_nodes, sizeof(*node), GFP_KERNEL);
|
|
||||||
if (!data)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
provider = &qp->provider;
|
|
||||||
provider->dev = &pdev->dev;
|
|
||||||
provider->set = qcom_icc_set;
|
|
||||||
provider->pre_aggregate = qcom_icc_pre_aggregate;
|
|
||||||
provider->aggregate = qcom_icc_aggregate;
|
|
||||||
provider->xlate_extended = qcom_icc_xlate_extended;
|
|
||||||
INIT_LIST_HEAD(&provider->nodes);
|
|
||||||
provider->data = data;
|
|
||||||
|
|
||||||
qp->dev = &pdev->dev;
|
|
||||||
qp->bcms = desc->bcms;
|
|
||||||
qp->num_bcms = desc->num_bcms;
|
|
||||||
|
|
||||||
qp->voter = of_bcm_voter_get(qp->dev, NULL);
|
|
||||||
if (IS_ERR(qp->voter))
|
|
||||||
return PTR_ERR(qp->voter);
|
|
||||||
|
|
||||||
ret = icc_provider_add(provider);
|
|
||||||
if (ret) {
|
|
||||||
dev_err_probe(&pdev->dev, ret,
|
|
||||||
"error adding interconnect provider\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < qp->num_bcms; i++)
|
|
||||||
qcom_icc_bcm_init(qp->bcms[i], &pdev->dev);
|
|
||||||
|
|
||||||
for (i = 0; i < num_nodes; i++) {
|
|
||||||
size_t j;
|
|
||||||
|
|
||||||
if (!qnodes[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
node = icc_node_create(qnodes[i]->id);
|
|
||||||
if (IS_ERR(node)) {
|
|
||||||
ret = PTR_ERR(node);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
node->name = qnodes[i]->name;
|
|
||||||
node->data = qnodes[i];
|
|
||||||
icc_node_add(node, provider);
|
|
||||||
|
|
||||||
for (j = 0; j < qnodes[i]->num_links; j++)
|
|
||||||
icc_link_create(node, qnodes[i]->links[j]);
|
|
||||||
|
|
||||||
data->nodes[i] = node;
|
|
||||||
}
|
|
||||||
data->num_nodes = num_nodes;
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, qp);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
err:
|
|
||||||
icc_nodes_remove(provider);
|
|
||||||
icc_provider_del(provider);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int qnoc_remove(struct platform_device *pdev)
|
|
||||||
{
|
|
||||||
struct qcom_icc_provider *qp = platform_get_drvdata(pdev);
|
|
||||||
|
|
||||||
icc_nodes_remove(&qp->provider);
|
|
||||||
icc_provider_del(&qp->provider);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct of_device_id qnoc_of_match[] = {
|
static const struct of_device_id qnoc_of_match[] = {
|
||||||
{ .compatible = "qcom,sm8550-aggre1-noc",
|
{ .compatible = "qcom,sm8550-aggre1-noc",
|
||||||
.data = &sm8550_aggre1_noc},
|
.data = &sm8550_aggre1_noc},
|
||||||
|
@ -2294,8 +2199,8 @@ static const struct of_device_id qnoc_of_match[] = {
|
||||||
MODULE_DEVICE_TABLE(of, qnoc_of_match);
|
MODULE_DEVICE_TABLE(of, qnoc_of_match);
|
||||||
|
|
||||||
static struct platform_driver qnoc_driver = {
|
static struct platform_driver qnoc_driver = {
|
||||||
.probe = qnoc_probe,
|
.probe = qcom_icc_rpmh_probe,
|
||||||
.remove = qnoc_remove,
|
.remove = qcom_icc_rpmh_remove,
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "qnoc-sm8550",
|
.name = "qnoc-sm8550",
|
||||||
.of_match_table = qnoc_of_match,
|
.of_match_table = qnoc_of_match,
|
||||||
|
|
Loading…
Reference in New Issue