xref: /openbmc/linux/drivers/remoteproc/qcom_q6v5.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
13b415c8fSBjorn Andersson /* SPDX-License-Identifier: GPL-2.0 */
23b415c8fSBjorn Andersson 
33b415c8fSBjorn Andersson #ifndef __QCOM_Q6V5_H__
43b415c8fSBjorn Andersson #define __QCOM_Q6V5_H__
53b415c8fSBjorn Andersson 
63b415c8fSBjorn Andersson #include <linux/kernel.h>
73b415c8fSBjorn Andersson #include <linux/completion.h>
8c1fe10d2SSibi Sankar #include <linux/soc/qcom/qcom_aoss.h>
93b415c8fSBjorn Andersson 
10*8d9be5c6SBjorn Andersson struct icc_path;
113b415c8fSBjorn Andersson struct rproc;
123b415c8fSBjorn Andersson struct qcom_smem_state;
13ed5da808SBjorn Andersson struct qcom_sysmon;
143b415c8fSBjorn Andersson 
153b415c8fSBjorn Andersson struct qcom_q6v5 {
163b415c8fSBjorn Andersson 	struct device *dev;
173b415c8fSBjorn Andersson 	struct rproc *rproc;
183b415c8fSBjorn Andersson 
193b415c8fSBjorn Andersson 	struct qcom_smem_state *state;
20c1fe10d2SSibi Sankar 	struct qmp *qmp;
21c1fe10d2SSibi Sankar 
22*8d9be5c6SBjorn Andersson 	struct icc_path *path;
23*8d9be5c6SBjorn Andersson 
243b415c8fSBjorn Andersson 	unsigned stop_bit;
253b415c8fSBjorn Andersson 
263b415c8fSBjorn Andersson 	int wdog_irq;
273b415c8fSBjorn Andersson 	int fatal_irq;
283b415c8fSBjorn Andersson 	int ready_irq;
293b415c8fSBjorn Andersson 	int handover_irq;
303b415c8fSBjorn Andersson 	int stop_irq;
313b415c8fSBjorn Andersson 
323b415c8fSBjorn Andersson 	bool handover_issued;
333b415c8fSBjorn Andersson 
343b415c8fSBjorn Andersson 	struct completion start_done;
353b415c8fSBjorn Andersson 	struct completion stop_done;
363b415c8fSBjorn Andersson 
373b415c8fSBjorn Andersson 	int crash_reason;
383b415c8fSBjorn Andersson 
393b415c8fSBjorn Andersson 	bool running;
403b415c8fSBjorn Andersson 
41c1fe10d2SSibi Sankar 	const char *load_state;
423b415c8fSBjorn Andersson 	void (*handover)(struct qcom_q6v5 *q6v5);
433b415c8fSBjorn Andersson };
443b415c8fSBjorn Andersson 
453b415c8fSBjorn Andersson int qcom_q6v5_init(struct qcom_q6v5 *q6v5, struct platform_device *pdev,
46c1fe10d2SSibi Sankar 		   struct rproc *rproc, int crash_reason, const char *load_state,
473b415c8fSBjorn Andersson 		   void (*handover)(struct qcom_q6v5 *q6v5));
48c1fe10d2SSibi Sankar void qcom_q6v5_deinit(struct qcom_q6v5 *q6v5);
493b415c8fSBjorn Andersson 
503b415c8fSBjorn Andersson int qcom_q6v5_prepare(struct qcom_q6v5 *q6v5);
513b415c8fSBjorn Andersson int qcom_q6v5_unprepare(struct qcom_q6v5 *q6v5);
52ed5da808SBjorn Andersson int qcom_q6v5_request_stop(struct qcom_q6v5 *q6v5, struct qcom_sysmon *sysmon);
533b415c8fSBjorn Andersson int qcom_q6v5_wait_for_start(struct qcom_q6v5 *q6v5, int timeout);
54e9142f5cSBjorn Andersson unsigned long qcom_q6v5_panic(struct qcom_q6v5 *q6v5);
553b415c8fSBjorn Andersson 
563b415c8fSBjorn Andersson #endif
57