soc: qcom: aoss: Drop power domain support
authorSibi Sankar <sibis@codeaurora.org>
Thu, 16 Sep 2021 13:59:28 +0000 (19:29 +0530)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Mon, 27 Sep 2021 19:59:55 +0000 (14:59 -0500)
Strip out the load state power-domain support from the driver since the
low power mode signalling for the co-processors is now accessible through
the direct qmp message send interface.

Signed-off-by: Sibi Sankar <sibis@codeaurora.org>
Reviewed-by: Matthias Kaehlcke <mka@chromium.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/1631800770-371-12-git-send-email-sibis@codeaurora.org
drivers/soc/qcom/qcom_aoss.c

index aac36f0..34acf58 100644 (file)
@@ -2,7 +2,6 @@
 /*
  * Copyright (c) 2019, Linaro Ltd
  */
-#include <dt-bindings/power/qcom-aoss-qmp.h>
 #include <linux/clk-provider.h>
 #include <linux/interrupt.h>
 #include <linux/io.h>
@@ -10,7 +9,6 @@
 #include <linux/module.h>
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
-#include <linux/pm_domain.h>
 #include <linux/thermal.h>
 #include <linux/slab.h>
 #include <linux/soc/qcom/qcom_aoss.h>
@@ -66,7 +64,6 @@ struct qmp_cooling_device {
  * @event: wait_queue for synchronization with the IRQ
  * @tx_lock: provides synchronization between multiple callers of qmp_send()
  * @qdss_clk: QDSS clock hw struct
- * @pd_data: genpd data
  * @cooling_devs: thermal cooling devices
  */
 struct qmp {
@@ -84,17 +81,9 @@ struct qmp {
        struct mutex tx_lock;
 
        struct clk_hw qdss_clk;
-       struct genpd_onecell_data pd_data;
        struct qmp_cooling_device *cooling_devs;
 };
 
-struct qmp_pd {
-       struct qmp *qmp;
-       struct generic_pm_domain pd;
-};
-
-#define to_qmp_pd_resource(res) container_of(res, struct qmp_pd, pd)
-
 static void qmp_kick(struct qmp *qmp)
 {
        mbox_send_message(qmp->mbox_chan, NULL);
@@ -320,95 +309,6 @@ static void qmp_qdss_clk_remove(struct qmp *qmp)
        clk_hw_unregister(&qmp->qdss_clk);
 }
 
-static int qmp_pd_power_toggle(struct qmp_pd *res, bool enable)
-{
-       char buf[QMP_MSG_LEN] = {};
-
-       snprintf(buf, sizeof(buf),
-                "{class: image, res: load_state, name: %s, val: %s}",
-                res->pd.name, enable ? "on" : "off");
-       return qmp_send(res->qmp, buf, sizeof(buf));
-}
-
-static int qmp_pd_power_on(struct generic_pm_domain *domain)
-{
-       return qmp_pd_power_toggle(to_qmp_pd_resource(domain), true);
-}
-
-static int qmp_pd_power_off(struct generic_pm_domain *domain)
-{
-       return qmp_pd_power_toggle(to_qmp_pd_resource(domain), false);
-}
-
-static const char * const sdm845_resources[] = {
-       [AOSS_QMP_LS_CDSP] = "cdsp",
-       [AOSS_QMP_LS_LPASS] = "adsp",
-       [AOSS_QMP_LS_MODEM] = "modem",
-       [AOSS_QMP_LS_SLPI] = "slpi",
-       [AOSS_QMP_LS_SPSS] = "spss",
-       [AOSS_QMP_LS_VENUS] = "venus",
-};
-
-static int qmp_pd_add(struct qmp *qmp)
-{
-       struct genpd_onecell_data *data = &qmp->pd_data;
-       struct device *dev = qmp->dev;
-       struct qmp_pd *res;
-       size_t num = ARRAY_SIZE(sdm845_resources);
-       int ret;
-       int i;
-
-       res = devm_kcalloc(dev, num, sizeof(*res), GFP_KERNEL);
-       if (!res)
-               return -ENOMEM;
-
-       data->domains = devm_kcalloc(dev, num, sizeof(*data->domains),
-                                    GFP_KERNEL);
-       if (!data->domains)
-               return -ENOMEM;
-
-       for (i = 0; i < num; i++) {
-               res[i].qmp = qmp;
-               res[i].pd.name = sdm845_resources[i];
-               res[i].pd.power_on = qmp_pd_power_on;
-               res[i].pd.power_off = qmp_pd_power_off;
-
-               ret = pm_genpd_init(&res[i].pd, NULL, true);
-               if (ret < 0) {
-                       dev_err(dev, "failed to init genpd\n");
-                       goto unroll_genpds;
-               }
-
-               data->domains[i] = &res[i].pd;
-       }
-
-       data->num_domains = i;
-
-       ret = of_genpd_add_provider_onecell(dev->of_node, data);
-       if (ret < 0)
-               goto unroll_genpds;
-
-       return 0;
-
-unroll_genpds:
-       for (i--; i >= 0; i--)
-               pm_genpd_remove(data->domains[i]);
-
-       return ret;
-}
-
-static void qmp_pd_remove(struct qmp *qmp)
-{
-       struct genpd_onecell_data *data = &qmp->pd_data;
-       struct device *dev = qmp->dev;
-       int i;
-
-       of_genpd_del_provider(dev->of_node);
-
-       for (i = 0; i < data->num_domains; i++)
-               pm_genpd_remove(data->domains[i]);
-}
-
 static int qmp_cdev_get_max_state(struct thermal_cooling_device *cdev,
                                  unsigned long *state)
 {
@@ -612,10 +512,6 @@ static int qmp_probe(struct platform_device *pdev)
        if (ret)
                goto err_close_qmp;
 
-       ret = qmp_pd_add(qmp);
-       if (ret)
-               goto err_remove_qdss_clk;
-
        ret = qmp_cooling_devices_register(qmp);
        if (ret)
                dev_err(&pdev->dev, "failed to register aoss cooling devices\n");
@@ -624,8 +520,6 @@ static int qmp_probe(struct platform_device *pdev)
 
        return 0;
 
-err_remove_qdss_clk:
-       qmp_qdss_clk_remove(qmp);
 err_close_qmp:
        qmp_close(qmp);
 err_free_mbox:
@@ -639,7 +533,6 @@ static int qmp_remove(struct platform_device *pdev)
        struct qmp *qmp = platform_get_drvdata(pdev);
 
        qmp_qdss_clk_remove(qmp);
-       qmp_pd_remove(qmp);
        qmp_cooling_devices_remove(qmp);
 
        qmp_close(qmp);