Commit 2f3ee5e4 authored by Alex Elder's avatar Alex Elder Committed by Bjorn Andersson

remoteproc: kill IPA notify code

The IPA code now uses the generic remoteproc SSR notification
mechanism.  This makes the original IPA notification code unused
and unnecessary, so get rid of it.

This is effectively a revert of commit d7f5f3c8 ("remoteproc:
add IPA notification to q6v5 driver").
Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Link: https://lore.kernel.org/r/20200724181142.13581-3-elder@linaro.orgSigned-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
parent 30eb3fbe
...@@ -154,7 +154,6 @@ config QCOM_Q6V5_MSS ...@@ -154,7 +154,6 @@ config QCOM_Q6V5_MSS
select QCOM_MDT_LOADER select QCOM_MDT_LOADER
select QCOM_PIL_INFO select QCOM_PIL_INFO
select QCOM_Q6V5_COMMON select QCOM_Q6V5_COMMON
select QCOM_Q6V5_IPA_NOTIFY
select QCOM_RPROC_COMMON select QCOM_RPROC_COMMON
select QCOM_SCM select QCOM_SCM
help help
...@@ -196,9 +195,6 @@ config QCOM_Q6V5_WCSS ...@@ -196,9 +195,6 @@ config QCOM_Q6V5_WCSS
Say y here to support the Qualcomm Peripheral Image Loader for the Say y here to support the Qualcomm Peripheral Image Loader for the
Hexagon V5 based WCSS remote processors. Hexagon V5 based WCSS remote processors.
config QCOM_Q6V5_IPA_NOTIFY
tristate
config QCOM_SYSMON config QCOM_SYSMON
tristate "Qualcomm sysmon driver" tristate "Qualcomm sysmon driver"
depends on RPMSG depends on RPMSG
......
...@@ -24,7 +24,6 @@ obj-$(CONFIG_QCOM_Q6V5_ADSP) += qcom_q6v5_adsp.o ...@@ -24,7 +24,6 @@ obj-$(CONFIG_QCOM_Q6V5_ADSP) += qcom_q6v5_adsp.o
obj-$(CONFIG_QCOM_Q6V5_MSS) += qcom_q6v5_mss.o obj-$(CONFIG_QCOM_Q6V5_MSS) += qcom_q6v5_mss.o
obj-$(CONFIG_QCOM_Q6V5_PAS) += qcom_q6v5_pas.o obj-$(CONFIG_QCOM_Q6V5_PAS) += qcom_q6v5_pas.o
obj-$(CONFIG_QCOM_Q6V5_WCSS) += qcom_q6v5_wcss.o obj-$(CONFIG_QCOM_Q6V5_WCSS) += qcom_q6v5_wcss.o
obj-$(CONFIG_QCOM_Q6V5_IPA_NOTIFY) += qcom_q6v5_ipa_notify.o
obj-$(CONFIG_QCOM_SYSMON) += qcom_sysmon.o obj-$(CONFIG_QCOM_SYSMON) += qcom_sysmon.o
obj-$(CONFIG_QCOM_WCNSS_PIL) += qcom_wcnss_pil.o obj-$(CONFIG_QCOM_WCNSS_PIL) += qcom_wcnss_pil.o
qcom_wcnss_pil-y += qcom_wcnss.o qcom_wcnss_pil-y += qcom_wcnss.o
......
// SPDX-License-Identifier: GPL-2.0
/*
* Qualcomm IPA notification subdev support
*
* Copyright (C) 2019 Linaro Ltd.
*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/remoteproc.h>
#include <linux/remoteproc/qcom_q6v5_ipa_notify.h>
static void
ipa_notify_common(struct rproc_subdev *subdev, enum qcom_rproc_event event)
{
struct qcom_rproc_ipa_notify *ipa_notify;
qcom_ipa_notify_t notify;
ipa_notify = container_of(subdev, struct qcom_rproc_ipa_notify, subdev);
notify = ipa_notify->notify;
if (notify)
notify(ipa_notify->data, event);
}
static int ipa_notify_prepare(struct rproc_subdev *subdev)
{
ipa_notify_common(subdev, MODEM_STARTING);
return 0;
}
static int ipa_notify_start(struct rproc_subdev *subdev)
{
ipa_notify_common(subdev, MODEM_RUNNING);
return 0;
}
static void ipa_notify_stop(struct rproc_subdev *subdev, bool crashed)
{
ipa_notify_common(subdev, crashed ? MODEM_CRASHED : MODEM_STOPPING);
}
static void ipa_notify_unprepare(struct rproc_subdev *subdev)
{
ipa_notify_common(subdev, MODEM_OFFLINE);
}
static void ipa_notify_removing(struct rproc_subdev *subdev)
{
ipa_notify_common(subdev, MODEM_REMOVING);
}
/* Register the IPA notification subdevice with the Q6V5 MSS remoteproc */
void qcom_add_ipa_notify_subdev(struct rproc *rproc,
struct qcom_rproc_ipa_notify *ipa_notify)
{
ipa_notify->notify = NULL;
ipa_notify->data = NULL;
ipa_notify->subdev.prepare = ipa_notify_prepare;
ipa_notify->subdev.start = ipa_notify_start;
ipa_notify->subdev.stop = ipa_notify_stop;
ipa_notify->subdev.unprepare = ipa_notify_unprepare;
rproc_add_subdev(rproc, &ipa_notify->subdev);
}
EXPORT_SYMBOL_GPL(qcom_add_ipa_notify_subdev);
/* Remove the IPA notification subdevice */
void qcom_remove_ipa_notify_subdev(struct rproc *rproc,
struct qcom_rproc_ipa_notify *ipa_notify)
{
struct rproc_subdev *subdev = &ipa_notify->subdev;
ipa_notify_removing(subdev);
rproc_remove_subdev(rproc, subdev);
ipa_notify->notify = NULL; /* Make it obvious */
}
EXPORT_SYMBOL_GPL(qcom_remove_ipa_notify_subdev);
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("Qualcomm IPA notification remoteproc subdev");
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/regulator/consumer.h> #include <linux/regulator/consumer.h>
#include <linux/remoteproc.h> #include <linux/remoteproc.h>
#include "linux/remoteproc/qcom_q6v5_ipa_notify.h"
#include <linux/reset.h> #include <linux/reset.h>
#include <linux/soc/qcom/mdt_loader.h> #include <linux/soc/qcom/mdt_loader.h>
#include <linux/iopoll.h> #include <linux/iopoll.h>
...@@ -197,7 +196,6 @@ struct q6v5 { ...@@ -197,7 +196,6 @@ struct q6v5 {
struct qcom_rproc_glink glink_subdev; struct qcom_rproc_glink glink_subdev;
struct qcom_rproc_subdev smd_subdev; struct qcom_rproc_subdev smd_subdev;
struct qcom_rproc_ssr ssr_subdev; struct qcom_rproc_ssr ssr_subdev;
struct qcom_rproc_ipa_notify ipa_notify_subdev;
struct qcom_sysmon *sysmon; struct qcom_sysmon *sysmon;
bool need_mem_protection; bool need_mem_protection;
bool has_alt_reset; bool has_alt_reset;
...@@ -1607,39 +1605,6 @@ static int q6v5_alloc_memory_region(struct q6v5 *qproc) ...@@ -1607,39 +1605,6 @@ static int q6v5_alloc_memory_region(struct q6v5 *qproc)
return 0; return 0;
} }
#if IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY)
/* Register IPA notification function */
int qcom_register_ipa_notify(struct rproc *rproc, qcom_ipa_notify_t notify,
void *data)
{
struct qcom_rproc_ipa_notify *ipa_notify;
struct q6v5 *qproc = rproc->priv;
if (!notify)
return -EINVAL;
ipa_notify = &qproc->ipa_notify_subdev;
if (ipa_notify->notify)
return -EBUSY;
ipa_notify->notify = notify;
ipa_notify->data = data;
return 0;
}
EXPORT_SYMBOL_GPL(qcom_register_ipa_notify);
/* Deregister IPA notification function */
void qcom_deregister_ipa_notify(struct rproc *rproc)
{
struct q6v5 *qproc = rproc->priv;
qproc->ipa_notify_subdev.notify = NULL;
}
EXPORT_SYMBOL_GPL(qcom_deregister_ipa_notify);
#endif /* !IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY) */
static int q6v5_probe(struct platform_device *pdev) static int q6v5_probe(struct platform_device *pdev)
{ {
const struct rproc_hexagon_res *desc; const struct rproc_hexagon_res *desc;
...@@ -1766,7 +1731,6 @@ static int q6v5_probe(struct platform_device *pdev) ...@@ -1766,7 +1731,6 @@ static int q6v5_probe(struct platform_device *pdev)
qcom_add_glink_subdev(rproc, &qproc->glink_subdev, "mpss"); qcom_add_glink_subdev(rproc, &qproc->glink_subdev, "mpss");
qcom_add_smd_subdev(rproc, &qproc->smd_subdev); qcom_add_smd_subdev(rproc, &qproc->smd_subdev);
qcom_add_ssr_subdev(rproc, &qproc->ssr_subdev, "mpss"); qcom_add_ssr_subdev(rproc, &qproc->ssr_subdev, "mpss");
qcom_add_ipa_notify_subdev(rproc, &qproc->ipa_notify_subdev);
qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12); qproc->sysmon = qcom_add_sysmon_subdev(rproc, "modem", 0x12);
if (IS_ERR(qproc->sysmon)) { if (IS_ERR(qproc->sysmon)) {
ret = PTR_ERR(qproc->sysmon); ret = PTR_ERR(qproc->sysmon);
...@@ -1782,7 +1746,6 @@ static int q6v5_probe(struct platform_device *pdev) ...@@ -1782,7 +1746,6 @@ static int q6v5_probe(struct platform_device *pdev)
remove_sysmon_subdev: remove_sysmon_subdev:
qcom_remove_sysmon_subdev(qproc->sysmon); qcom_remove_sysmon_subdev(qproc->sysmon);
remove_subdevs: remove_subdevs:
qcom_remove_ipa_notify_subdev(qproc->rproc, &qproc->ipa_notify_subdev);
qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev); qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev);
qcom_remove_smd_subdev(rproc, &qproc->smd_subdev); qcom_remove_smd_subdev(rproc, &qproc->smd_subdev);
qcom_remove_glink_subdev(rproc, &qproc->glink_subdev); qcom_remove_glink_subdev(rproc, &qproc->glink_subdev);
...@@ -1804,7 +1767,6 @@ static int q6v5_remove(struct platform_device *pdev) ...@@ -1804,7 +1767,6 @@ static int q6v5_remove(struct platform_device *pdev)
rproc_del(rproc); rproc_del(rproc);
qcom_remove_sysmon_subdev(qproc->sysmon); qcom_remove_sysmon_subdev(qproc->sysmon);
qcom_remove_ipa_notify_subdev(rproc, &qproc->ipa_notify_subdev);
qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev); qcom_remove_ssr_subdev(rproc, &qproc->ssr_subdev);
qcom_remove_smd_subdev(rproc, &qproc->smd_subdev); qcom_remove_smd_subdev(rproc, &qproc->smd_subdev);
qcom_remove_glink_subdev(rproc, &qproc->glink_subdev); qcom_remove_glink_subdev(rproc, &qproc->glink_subdev);
......
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2019 Linaro Ltd. */
#ifndef __QCOM_Q6V5_IPA_NOTIFY_H__
#define __QCOM_Q6V5_IPA_NOTIFY_H__
#if IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY)
#include <linux/remoteproc.h>
enum qcom_rproc_event {
MODEM_STARTING = 0, /* Modem is about to be started */
MODEM_RUNNING = 1, /* Startup complete; modem is operational */
MODEM_STOPPING = 2, /* Modem is about to shut down */
MODEM_CRASHED = 3, /* Modem has crashed (implies stopping) */
MODEM_OFFLINE = 4, /* Modem is now offline */
MODEM_REMOVING = 5, /* Modem is about to be removed */
};
typedef void (*qcom_ipa_notify_t)(void *data, enum qcom_rproc_event event);
struct qcom_rproc_ipa_notify {
struct rproc_subdev subdev;
qcom_ipa_notify_t notify;
void *data;
};
/**
* qcom_add_ipa_notify_subdev() - Register IPA notification subdevice
* @rproc: rproc handle
* @ipa_notify: IPA notification subdevice handle
*
* Register the @ipa_notify subdevice with the @rproc so modem events
* can be sent to IPA when they occur.
*
* This is defined in "qcom_q6v5_ipa_notify.c".
*/
void qcom_add_ipa_notify_subdev(struct rproc *rproc,
struct qcom_rproc_ipa_notify *ipa_notify);
/**
* qcom_remove_ipa_notify_subdev() - Remove IPA SSR subdevice
* @rproc: rproc handle
* @ipa_notify: IPA notification subdevice handle
*
* This is defined in "qcom_q6v5_ipa_notify.c".
*/
void qcom_remove_ipa_notify_subdev(struct rproc *rproc,
struct qcom_rproc_ipa_notify *ipa_notify);
/**
* qcom_register_ipa_notify() - Register IPA notification function
* @rproc: Remote processor handle
* @notify: Non-null IPA notification callback function pointer
* @data: Data supplied to IPA notification callback function
*
* @Return: 0 if successful, or a negative error code otherwise
*
* This is defined in "qcom_q6v5_mss.c".
*/
int qcom_register_ipa_notify(struct rproc *rproc, qcom_ipa_notify_t notify,
void *data);
/**
* qcom_deregister_ipa_notify() - Deregister IPA notification function
* @rproc: Remote processor handle
*
* This is defined in "qcom_q6v5_mss.c".
*/
void qcom_deregister_ipa_notify(struct rproc *rproc);
#else /* !IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY) */
struct qcom_rproc_ipa_notify { /* empty */ };
#define qcom_add_ipa_notify_subdev(rproc, ipa_notify) /* no-op */
#define qcom_remove_ipa_notify_subdev(rproc, ipa_notify) /* no-op */
#endif /* !IS_ENABLED(CONFIG_QCOM_Q6V5_IPA_NOTIFY) */
#endif /* !__QCOM_Q6V5_IPA_NOTIFY_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment