From ff4921f39f75adeca3ee0b9825bfa6ce01866a6d Mon Sep 17 00:00:00 2001 From: Yvan Tortorella Date: Fri, 20 Oct 2023 00:10:38 +0200 Subject: [PATCH] Added function to write in the cluster internal return value. --- include/archi/cluster_ctrl/cluster_ctrl_v2.h | 2 ++ include/hal/cluster_ctrl/cluster_ctrl_v2.h | 4 ++++ kernel/cluster.c | 1 + 3 files changed, 7 insertions(+) diff --git a/include/archi/cluster_ctrl/cluster_ctrl_v2.h b/include/archi/cluster_ctrl/cluster_ctrl_v2.h index 0c68be9..c59d235 100644 --- a/include/archi/cluster_ctrl/cluster_ctrl_v2.h +++ b/include/archi/cluster_ctrl/cluster_ctrl_v2.h @@ -31,8 +31,10 @@ #define ARCHI_CLUSTER_CTRL_CLUSTER_CLK_GATE 0x20 #define ARCHI_CLUSTER_CTRL_DBG_STATUS 0x28 #define ARCHI_CLUSTER_CTRL_DBG_HALT_MASK 0x38 +#define ARCHI_CLUSTER_CTRL_RETURN 0x100 #define ARCHI_CLUSTER_CTRL_BOOTADDR(core) (0x40 + 4*(core)) #define ARCHI_CLUSTER_CTRL_BOOTADDR_COREID(offset) (((offset) - ARCHI_CLUSTER_CTRL_BOOTADDR(0)) >> 2) +#define ARCHI_CLUSTER_CTRL_RETURN_SHIFT_BITS 31 #endif diff --git a/include/hal/cluster_ctrl/cluster_ctrl_v2.h b/include/hal/cluster_ctrl/cluster_ctrl_v2.h index e1bd9a5..322aa86 100644 --- a/include/hal/cluster_ctrl/cluster_ctrl_v2.h +++ b/include/hal/cluster_ctrl/cluster_ctrl_v2.h @@ -67,4 +67,8 @@ static inline unsigned int plp_ctrl_bootaddr_get() { return pulp_read32(ARCHI_CLUSTER_CTRL_ADDR + 0x40); } +static inline void hal_cluster_ctrl_return_set_remote(int cid, int value){ + pulp_write32(ARCHI_CLUSTER_PERIPHERALS_GLOBAL_ADDR(cid)+ARCHI_CLUSTER_CTRL_OFFSET+ARCHI_CLUSTER_CTRL_RETURN, value | 1 << ARCHI_CLUSTER_CTRL_RETURN_SHIFT_BITS); +} + #endif diff --git a/kernel/cluster.c b/kernel/cluster.c index 9ccac05..19b34fc 100644 --- a/kernel/cluster.c +++ b/kernel/cluster.c @@ -69,6 +69,7 @@ void cluster_entry_stub() cluster_retval = retval; cluster_running = 0; #ifdef ARCHI_NO_FC + hal_cluster_ctrl_return_set_remote(hal_cluster_id(), cluster_retval); hal_cluster_ctrl_eoc_set_remote(hal_cluster_id(), 1); exit(cluster_retval); #endif