From bc2e1198ccdc32b608b7b962deb04b7c4d794eee Mon Sep 17 00:00:00 2001 From: Vivek Aknurwar Date: Wed, 9 Jun 2021 20:49:38 -0700 Subject: [PATCH] interconnect: qcom: icc-rpmh: Implement stub handling Skip bcm init and implement stubs for icc apis when stub property is defined. Change-Id: Ic56a75578b6fa4fe35bebaf103d41205e444efed Signed-off-by: Vivek Aknurwar --- drivers/interconnect/qcom/icc-rpmh.c | 31 +++++++++++++++++----------- drivers/interconnect/qcom/icc-rpmh.h | 1 + 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/interconnect/qcom/icc-rpmh.c b/drivers/interconnect/qcom/icc-rpmh.c index 3072ecad5172..93e999f99e63 100644 --- a/drivers/interconnect/qcom/icc-rpmh.c +++ b/drivers/interconnect/qcom/icc-rpmh.c @@ -263,6 +263,8 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) if (!data) return -ENOMEM; + qp->stub = of_property_read_bool(pdev->dev.of_node, "qcom,stub"); + provider = &qp->provider; provider->dev = dev; provider->set = qcom_icc_set_stub; @@ -275,19 +277,22 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) qp->dev = dev; qp->bcms = desc->bcms; - qp->num_bcms = desc->num_bcms; - qp->num_voters = desc->num_voters; - qp->voters = devm_kcalloc(&pdev->dev, qp->num_voters, - sizeof(*qp->voters), GFP_KERNEL); + if (!qp->stub) { + qp->num_bcms = desc->num_bcms; + qp->num_voters = desc->num_voters; - if (!qp->voters) - return -ENOMEM; + qp->voters = devm_kcalloc(&pdev->dev, qp->num_voters, + sizeof(*qp->voters), GFP_KERNEL); - for (i = 0; i < qp->num_voters; i++) { - qp->voters[i] = of_bcm_voter_get(qp->dev, desc->voters[i]); - if (IS_ERR(qp->voters[i])) - return PTR_ERR(qp->voters[i]); + if (!qp->voters) + return -ENOMEM; + + for (i = 0; i < qp->num_voters; i++) { + qp->voters[i] = of_bcm_voter_get(qp->dev, desc->voters[i]); + if (IS_ERR(qp->voters[i])) + return PTR_ERR(qp->voters[i]); + } } qp->regmap = qcom_icc_rpmh_map(pdev, desc); @@ -340,8 +345,10 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev) data->num_nodes = num_nodes; platform_set_drvdata(pdev, qp); - provider->set = qcom_icc_set; - provider->aggregate = qcom_icc_aggregate; + if (!qp->stub) { + provider->set = qcom_icc_set; + provider->aggregate = qcom_icc_aggregate; + } qcom_icc_debug_register(provider); diff --git a/drivers/interconnect/qcom/icc-rpmh.h b/drivers/interconnect/qcom/icc-rpmh.h index 6fa78ddf2987..b75609a55e9a 100644 --- a/drivers/interconnect/qcom/icc-rpmh.h +++ b/drivers/interconnect/qcom/icc-rpmh.h @@ -32,6 +32,7 @@ struct qcom_icc_provider { int num_clks; struct bcm_voter **voters; size_t num_voters; + bool stub; }; /**