To facilitate dynamic node ID support, the driver now uses node pointers for links instead of static node IDs. Additionally, the default node ID is set to -1 to prompt the ICC framework for dynamic node ID allocation. Signed-off-by: Raviteja Laggyshetty <quic_rlaggysh@xxxxxxxxxxx> --- drivers/interconnect/qcom/icc-rpmh.c | 16 ++++++++++++++-- drivers/interconnect/qcom/icc-rpmh.h | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/interconnect/qcom/icc-rpmh.c b/drivers/interconnect/qcom/icc-rpmh.c index f2d63745be54..2e654917f535 100644 --- a/drivers/interconnect/qcom/icc-rpmh.c +++ b/drivers/interconnect/qcom/icc-rpmh.c @@ -285,13 +285,25 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) ret = PTR_ERR(node); goto err_remove_nodes; } + qn->id = node->id; node->name = qn->name; node->data = qn; icc_node_add(node, provider); - for (j = 0; j < qn->num_links; j++) - icc_link_create(node, qn->links[j]); + for (j = 0; j < qn->num_links; j++) { + struct qcom_icc_node *qn_link_node = qn->link_nodes[j]; + struct icc_node *link_node; + + if (qn_link_node) { + link_node = icc_node_create(qn_link_node->id); + qn_link_node->id = link_node->id; + icc_link_create(node, qn_link_node->id); + } else { + /* backward compatibility for target using static IDs */ + icc_link_create(node, qn->links[j]); + } + } data->nodes[i] = node; } diff --git a/drivers/interconnect/qcom/icc-rpmh.h b/drivers/interconnect/qcom/icc-rpmh.h index 82344c734091..cf4aa69c707c 100644 --- a/drivers/interconnect/qcom/icc-rpmh.h +++ b/drivers/interconnect/qcom/icc-rpmh.h @@ -95,7 +95,8 @@ struct qcom_icc_qosbox { struct qcom_icc_node { const char *name; u16 links[MAX_LINKS]; - u16 id; + struct qcom_icc_node *link_nodes[MAX_LINKS]; + int id; u16 num_links; u16 channels; u16 buswidth; -- 2.39.2