Re: [PATCH v2] remoteproc: k3-dsp: Avoid reloading of firmware

2023-12-19 Thread Tom Rini
On Sat, Nov 25, 2023 at 11:59:39PM +0530, Udit Kumar wrote:

> DSP core is going into abnormal state when load callback is called
> after starting of DSP core.
> Reload of firmware needs core to be stopped first, followed by
> load.
> So avoid loading of firmware, when core is started.
> 
> Signed-off-by: Udit Kumar 

Applied to u-boot/next, thanks!

-- 
Tom


signature.asc
Description: PGP signature


[PATCH v2] remoteproc: k3-dsp: Avoid reloading of firmware

2023-11-25 Thread Udit Kumar
DSP core is going into abnormal state when load callback is called
after starting of DSP core.
Reload of firmware needs core to be stopped first, followed by
load.
So avoid loading of firmware, when core is started.

Signed-off-by: Udit Kumar 
---
Change log:
Changes in v2:
- Added details for in_use variable in comment
- Link to v1 
https://lore.kernel.org/all/20231124063111.1744600-1-u-kum...@ti.com/

 drivers/remoteproc/ti_k3_dsp_rproc.c | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/drivers/remoteproc/ti_k3_dsp_rproc.c 
b/drivers/remoteproc/ti_k3_dsp_rproc.c
index 576de4bb26..1c6515f9ab 100644
--- a/drivers/remoteproc/ti_k3_dsp_rproc.c
+++ b/drivers/remoteproc/ti_k3_dsp_rproc.c
@@ -56,6 +56,7 @@ struct k3_dsp_boot_data {
  * @data:  Pointer to DSP specific boot data structure
  * @mem:   Array of available memories
  * @num_mem:   Number of available memories
+ * @in_use: flag to tell if the core is already in use.
  */
 struct k3_dsp_privdata {
struct reset_ctl dsp_rst;
@@ -63,6 +64,7 @@ struct k3_dsp_privdata {
struct k3_dsp_boot_data *data;
struct k3_dsp_mem *mem;
int num_mems;
+   bool in_use;
 };
 
 /*
@@ -128,6 +130,13 @@ static int k3_dsp_load(struct udevice *dev, ulong addr, 
ulong size)
u32 boot_vector;
int ret;
 
+   if (dsp->in_use) {
+   dev_err(dev,
+   "Invalid op: Trying to load/start on already running 
core %d\n",
+   dsp->tsp.proc_id);
+   return -EINVAL;
+   }
+
dev_dbg(dev, "%s addr = 0x%lx, size = 0x%lx\n", __func__, addr, size);
ret = ti_sci_proc_request(&dsp->tsp);
if (ret)
@@ -195,6 +204,7 @@ static int k3_dsp_start(struct udevice *dev)
ti_sci_proc_power_domain_off(&dsp->tsp);
}
 
+   dsp->in_use = true;
 proc_release:
ti_sci_proc_release(&dsp->tsp);
 
@@ -207,6 +217,7 @@ static int k3_dsp_stop(struct udevice *dev)
 
dev_dbg(dev, "%s\n", __func__);
 
+   dsp->in_use = false;
ti_sci_proc_request(&dsp->tsp);
reset_assert(&dsp->dsp_rst);
ti_sci_proc_power_domain_off(&dsp->tsp);
-- 
2.34.1