interconnect: qcom: icc-rpmh: separate the qos configuration
Separate out the qos configuration functionality so that we can re-use the same for hibernation restore use-case. Change-Id: I91f390a09807b8eb7e57a5431fc5aaae8d2c04a7 Signed-off-by: Veera Vegivada <quic_vvegivad@quicinc.com>
This commit is contained in:
parent
888ef98cc5
commit
8ba060468f
@ -323,6 +323,31 @@ static void disable_qos_deps(struct qcom_icc_provider *qp)
|
||||
}
|
||||
}
|
||||
|
||||
int qcom_icc_rpmh_configure_qos(struct qcom_icc_provider *qp)
|
||||
{
|
||||
struct qcom_icc_node *qnode;
|
||||
size_t i;
|
||||
int ret;
|
||||
|
||||
ret = enable_qos_deps(qp);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (i = 0; i < qp->num_nodes; i++) {
|
||||
qnode = qp->nodes[i];
|
||||
if (!qnode)
|
||||
continue;
|
||||
|
||||
if (qnode->qosbox)
|
||||
qnode->noc_ops->set_qos(qnode);
|
||||
}
|
||||
|
||||
disable_qos_deps(qp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(qcom_icc_rpmh_configure_qos);
|
||||
|
||||
static struct regmap *qcom_icc_rpmh_map(struct platform_device *pdev,
|
||||
const struct qcom_icc_desc *desc)
|
||||
{
|
||||
@ -383,6 +408,8 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
||||
|
||||
qp->dev = dev;
|
||||
qp->bcms = desc->bcms;
|
||||
qp->nodes = desc->nodes;
|
||||
qp->num_nodes = desc->num_nodes;
|
||||
|
||||
if (!qp->stub) {
|
||||
qp->num_bcms = desc->num_bcms;
|
||||
@ -416,12 +443,6 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
||||
for (i = 0; i < qp->num_bcms; i++)
|
||||
qcom_icc_bcm_init(qp, qp->bcms[i], dev);
|
||||
|
||||
if (!qp->skip_qos) {
|
||||
ret = enable_qos_deps(qp);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_nodes; i++) {
|
||||
qn = qnodes[i];
|
||||
if (!qn)
|
||||
@ -446,9 +467,6 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
||||
}
|
||||
}
|
||||
|
||||
if (qn->qosbox && !qp->skip_qos)
|
||||
qn->noc_ops->set_qos(qn);
|
||||
|
||||
node->name = qn->name;
|
||||
node->data = qn;
|
||||
icc_node_add(node, provider);
|
||||
@ -459,10 +477,14 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
||||
data->nodes[i] = node;
|
||||
}
|
||||
|
||||
if (!qp->skip_qos)
|
||||
disable_qos_deps(qp);
|
||||
|
||||
data->num_nodes = num_nodes;
|
||||
|
||||
if (!qp->skip_qos) {
|
||||
ret = qcom_icc_rpmh_configure_qos(qp);
|
||||
if (ret)
|
||||
goto err;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, qp);
|
||||
|
||||
if (!qp->stub) {
|
||||
@ -483,7 +505,6 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev)
|
||||
|
||||
return 0;
|
||||
err:
|
||||
clk_bulk_disable_unprepare(qp->num_clks, qp->clks);
|
||||
clk_bulk_put_all(qp->num_clks, qp->clks);
|
||||
icc_nodes_remove(provider);
|
||||
icc_provider_del(provider);
|
||||
|
@ -26,6 +26,8 @@ struct qcom_icc_provider {
|
||||
struct device *dev;
|
||||
struct qcom_icc_bcm * const *bcms;
|
||||
size_t num_bcms;
|
||||
struct qcom_icc_node * const *nodes;
|
||||
size_t num_nodes;
|
||||
struct list_head probe_list;
|
||||
struct regmap *regmap;
|
||||
struct clk_bulk_data *clks;
|
||||
@ -179,4 +181,5 @@ int qcom_icc_rpmh_probe(struct platform_device *pdev);
|
||||
int qcom_icc_rpmh_remove(struct platform_device *pdev);
|
||||
void qcom_icc_rpmh_sync_state(struct device *dev);
|
||||
int qcom_icc_get_bw_stub(struct icc_node *node, u32 *avg, u32 *peak);
|
||||
int qcom_icc_rpmh_configure_qos(struct qcom_icc_provider *qp);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user