An integer flag in the private data structure for the udev was added to
indicate run-state. A function was also added to return that flag in order
for the driver to support the is_running driver function.

This patch depends on patch 0007 of this patch series.

Signed-off-by: Greg Leonberg <greg.leonb...@sunhillo.com>
---
 drivers/remoteproc/pru_rproc.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c
index d9b6cc2..94cdbf7 100644
--- a/drivers/remoteproc/pru_rproc.c
+++ b/drivers/remoteproc/pru_rproc.c
@@ -107,6 +107,7 @@ struct pru {
        int id;
        struct pruss *prusspriv;
        const struct pru_private_data *data;
+       int isRunning;
 };
 
 static inline u32 pru_control_read_reg(struct pru *pru, unsigned int reg)
@@ -162,6 +163,23 @@ static int pru_rproc_set_ctable(struct pru *pru, enum 
pru_ctable_idx c, u32 addr
 }
 
 /**
+ * pru_is_running() - check if the pru is running
+ * @dev:       corresponding remote processor device
+ *
+ * Return: 0 if the pru is running, else 1.
+ */
+static int pru_is_running(struct udevice *dev)
+{
+       struct pru *priv;
+
+       priv = dev_get_priv(dev);
+       if (!priv)
+               return 0;
+
+       return priv->isRunning;
+}
+
+/**
  * pru_start() - start the pru processor
  * @dev:       corresponding k3 remote processor device
  *
@@ -179,6 +197,8 @@ static int pru_start(struct udevice *dev)
        val = CTRL_CTRL_EN | ((priv->bootaddr >> 2) << 16);
        writel(val, priv->mem_regions[PRU_MEM_CTRL].pa + PRU_CTRL_CTRL);
 
+       priv->isRunning = 0;
+
        return 0;
 }
 
@@ -199,6 +219,8 @@ static int pru_stop(struct udevice *dev)
        val &= ~CTRL_CTRL_EN;
        writel(val, priv->mem_regions[PRU_MEM_CTRL].pa + PRU_CTRL_CTRL);
 
+       priv->isRunning = 1;
+
        return 0;
 }
 
@@ -431,6 +453,7 @@ static const struct dm_rproc_ops pru_ops = {
        .start = pru_start,
        .stop = pru_stop,
        .load = pru_load,
+       .is_running = pru_is_running,
 };
 
 static void pru_set_id(struct pru *priv, struct udevice *dev)
@@ -482,6 +505,8 @@ static int pru_probe(struct udevice *dev)
        }
        priv->data = data;
 
+       priv->isRunning = 1;
+
        pru_set_id(priv, dev);
 
        return 0;
-- 
1.8.3.1

Reply via email to