Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 21 additions & 8 deletions src/init/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,23 +87,37 @@ static inline void lp_sram_unpack(void)

#if CONFIG_MULTICORE

#ifndef __ZEPHYR__
#ifdef __ZEPHYR__

static int check_restore(void)
static bool check_restore(void)
{
struct idc *idc = *idc_get();
struct task *task = *task_main_get();
struct notify *notifier = *arch_notify_get();
struct schedulers *schedulers = *arch_schedulers_get();

/* check whether basic core structures has been already allocated. If they
* are available in memory, it means that this is not cold boot and memory
* has not been powered off.
*/
if (!idc || !task || !notifier || !schedulers)
return 0;
return !!idc && !!notifier && !!schedulers;
}

static inline int secondary_core_restore(void) { return 0; };

#else

return 1;
static bool check_restore(void)
{
struct idc *idc = *idc_get();
struct task *task = *task_main_get();
struct notify *notifier = *arch_notify_get();
struct schedulers *schedulers = *arch_schedulers_get();

/* check whether basic core structures has been already allocated. If they
* are available in memory, it means that this is not cold boot and memory
* has not been powered off.
*/
return !!idc && !!task && !!notifier && !!schedulers;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lyakh I could use the same function if I skipped checking the 'task' pointer.

}

static int secondary_core_restore(void)
Expand Down Expand Up @@ -158,7 +172,7 @@ int secondary_core_init(struct sof *sof)
err = arch_init();
if (err < 0)
sof_panic(SOF_IPC_PANIC_ARCH);

#endif
/* check whether we are in a cold boot process or not (e.g. D0->D0ix
* flow when primary core disables all secondary cores). If not, we do
* not have allocate basic structures like e.g. schedulers, notifier,
Expand All @@ -167,7 +181,6 @@ int secondary_core_init(struct sof *sof)
*/
if (check_restore())
return secondary_core_restore();
#endif

trace_point(TRACE_BOOT_SYS_NOTIFIER);
init_system_notify(sof);
Expand Down