
When the coprocessor has been started, provide the context to Linux kernel so it can handle it: - update the coprocessor node of kernel DeviceTree with the "early-booted" property. - write the resource table address in a dedicated backup register.
Signed-off-by: Fabien Dessenne fabien.dessenne@st.com --- board/st/stm32mp1/stm32mp1.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c index 18f9b84..8c669d0 100644 --- a/board/st/stm32mp1/stm32mp1.c +++ b/board/st/stm32mp1/stm32mp1.c @@ -891,6 +891,7 @@ void board_mtdparts_default(const char **mtdids, const char **mtdparts) #if defined(CONFIG_OF_BOARD_SETUP) int ft_board_setup(void *blob, bd_t *bd) { + int off, id = 0; /* Copro id fixed to 0 as only one coproc on mp1 */ #ifdef CONFIG_FDT_FIXUP_PARTITIONS struct node_info nodes[] = { { "st,stm32f469-qspi", MTD_DEV_TYPE_NOR, }, @@ -899,6 +900,17 @@ int ft_board_setup(void *blob, bd_t *bd) fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes)); #endif
+ /* Update DT if coprocessor started */ + off = fdt_path_offset(blob, "/mlahb/m4@10000000"); + if (off > 0) { + if (!rproc_is_running(id)) { + fdt_setprop_empty(blob, off, "early-booted"); + } else { + fdt_delprop(blob, off, "early-booted"); + writel(0, TAMP_COPRO_RSC_TBL_ADDRESS); + } + } + return 0; } #endif @@ -918,10 +930,8 @@ static void board_copro_image_process(ulong fw_image, size_t fw_size) printf("Load Remote Processor %d with data@addr=0x%08lx %u bytes:%s\n", id, fw_image, fw_size, ret ? " Failed!" : " Success!");
- if (!ret) { + if (!ret) rproc_start(id); - env_set("copro_state", "booted"); - } }
U_BOOT_FIT_LOADABLE_HANDLER(IH_TYPE_COPRO, board_copro_image_process);