soc: qcom: aoss: Drop power domain support

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
This commit is contained in:
Sibi Sankar 2021-09-16 19:29:28 +05:30 committed by Bjorn Andersson
parent a4fe515903
commit 99512191f4
1 changed files with 0 additions and 107 deletions

View File

@ -2,7 +2,6 @@
/* /*
* Copyright (c) 2019, Linaro Ltd * Copyright (c) 2019, Linaro Ltd
*/ */
#include <dt-bindings/power/qcom-aoss-qmp.h>
#include <linux/clk-provider.h> #include <linux/clk-provider.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/io.h> #include <linux/io.h>
@ -10,7 +9,6 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_platform.h> #include <linux/of_platform.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pm_domain.h>
#include <linux/thermal.h> #include <linux/thermal.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/soc/qcom/qcom_aoss.h> #include <linux/soc/qcom/qcom_aoss.h>
@ -66,7 +64,6 @@ struct qmp_cooling_device {
* @event: wait_queue for synchronization with the IRQ * @event: wait_queue for synchronization with the IRQ
* @tx_lock: provides synchronization between multiple callers of qmp_send() * @tx_lock: provides synchronization between multiple callers of qmp_send()
* @qdss_clk: QDSS clock hw struct * @qdss_clk: QDSS clock hw struct
* @pd_data: genpd data
* @cooling_devs: thermal cooling devices * @cooling_devs: thermal cooling devices
*/ */
struct qmp { struct qmp {
@ -84,17 +81,9 @@ struct qmp {
struct mutex tx_lock; struct mutex tx_lock;
struct clk_hw qdss_clk; struct clk_hw qdss_clk;
struct genpd_onecell_data pd_data;
struct qmp_cooling_device *cooling_devs; 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) static void qmp_kick(struct qmp *qmp)
{ {
mbox_send_message(qmp->mbox_chan, NULL); 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); 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, static int qmp_cdev_get_max_state(struct thermal_cooling_device *cdev,
unsigned long *state) unsigned long *state)
{ {
@ -612,10 +512,6 @@ static int qmp_probe(struct platform_device *pdev)
if (ret) if (ret)
goto err_close_qmp; goto err_close_qmp;
ret = qmp_pd_add(qmp);
if (ret)
goto err_remove_qdss_clk;
ret = qmp_cooling_devices_register(qmp); ret = qmp_cooling_devices_register(qmp);
if (ret) if (ret)
dev_err(&pdev->dev, "failed to register aoss cooling devices\n"); 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; return 0;
err_remove_qdss_clk:
qmp_qdss_clk_remove(qmp);
err_close_qmp: err_close_qmp:
qmp_close(qmp); qmp_close(qmp);
err_free_mbox: err_free_mbox:
@ -639,7 +533,6 @@ static int qmp_remove(struct platform_device *pdev)
struct qmp *qmp = platform_get_drvdata(pdev); struct qmp *qmp = platform_get_drvdata(pdev);
qmp_qdss_clk_remove(qmp); qmp_qdss_clk_remove(qmp);
qmp_pd_remove(qmp);
qmp_cooling_devices_remove(qmp); qmp_cooling_devices_remove(qmp);
qmp_close(qmp); qmp_close(qmp);