summaryrefslogtreecommitdiff
path: root/drivers/remoteproc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/remoteproc')
-rw-r--r--drivers/remoteproc/Kconfig1
-rw-r--r--drivers/remoteproc/ti_k3_arm64_rproc.c2
-rw-r--r--drivers/remoteproc/ti_k3_r5f_rproc.c15
3 files changed, 13 insertions, 5 deletions
diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
index a3ecea05e20..e9f19a69433 100644
--- a/drivers/remoteproc/Kconfig
+++ b/drivers/remoteproc/Kconfig
@@ -125,6 +125,7 @@ config REMOTEPROC_TI_PRU
config REMOTEPROC_TI_IPU
bool "Support for TI's K3 based IPU remoteproc driver"
select REMOTEPROC
+ depends on ARCH_K3
depends on DM
depends on SPL_DRIVERS_MISC
depends on SPL_FS_LOADER
diff --git a/drivers/remoteproc/ti_k3_arm64_rproc.c b/drivers/remoteproc/ti_k3_arm64_rproc.c
index d3eb957b2e4..403c6bed2e8 100644
--- a/drivers/remoteproc/ti_k3_arm64_rproc.c
+++ b/drivers/remoteproc/ti_k3_arm64_rproc.c
@@ -19,7 +19,7 @@
#include <linux/soc/ti/ti_sci_protocol.h>
#include "ti_sci_proc.h"
-#define INVALID_ID 0xffff
+#define INVALID_ID 0xff
#define GTC_CNTCR_REG 0x0
#define GTC_CNTFID0_REG 0x20
diff --git a/drivers/remoteproc/ti_k3_r5f_rproc.c b/drivers/remoteproc/ti_k3_r5f_rproc.c
index f4bab6868ee..48401bc6eb6 100644
--- a/drivers/remoteproc/ti_k3_r5f_rproc.c
+++ b/drivers/remoteproc/ti_k3_r5f_rproc.c
@@ -233,7 +233,7 @@ static int k3_r5f_prepare(struct udevice *dev)
dev_dbg(dev, "%s\n", __func__);
- if (cluster->mode == CLUSTER_MODE_LOCKSTEP)
+ if ((cluster->mode == CLUSTER_MODE_LOCKSTEP) || (cluster->mode == CLUSTER_MODE_SINGLECPU))
ret = k3_r5f_lockstep_release(cluster);
else
ret = k3_r5f_split_release(core);
@@ -269,6 +269,13 @@ static int k3_r5f_core_sanity_check(struct k3_r5f_core *core)
return -EINVAL;
}
+ if (cluster->mode == CLUSTER_MODE_SINGLECPU && !is_primary_core(core)) {
+ dev_err(core->dev,
+ "Invalid op: Trying to start secondary core %d in single CPU mode\n",
+ core->tsp.proc_id);
+ return -EINVAL;
+ }
+
if (cluster->mode == CLUSTER_MODE_SPLIT && !is_primary_core(core)) {
if (!core->cluster->cores[0]->in_use) {
dev_err(core->dev,
@@ -441,7 +448,7 @@ proc_release:
static int k3_r5f_split_reset(struct k3_r5f_core *core)
{
- int ret;
+ int ret = 0;
dev_dbg(core->dev, "%s\n", __func__);
@@ -476,7 +483,7 @@ static int k3_r5f_unprepare(struct udevice *dev)
{
struct k3_r5f_core *core = dev_get_priv(dev);
struct k3_r5f_cluster *cluster = core->cluster;
- int ret;
+ int ret = 0;
dev_dbg(dev, "%s\n", __func__);
@@ -768,7 +775,7 @@ static void k3_r5f_core_adjust_tcm_sizes(struct k3_r5f_core *core)
{
struct k3_r5f_cluster *cluster = core->cluster;
- if (cluster->mode == CLUSTER_MODE_LOCKSTEP)
+ if ((cluster->mode == CLUSTER_MODE_LOCKSTEP) || (cluster->mode == CLUSTER_MODE_SINGLECPU))
return;
if (!core->ipdata->tcm_is_double)