Revert "armv8: release slave cores from CPU_RELEASE_ADDR"
This reverts commit8c36e99f21
. There is misunderstanding in commit8c36e99f21
("armv8: release slave cores from CPU_RELEASE_ADDR"). How to bring the slave cores into U-Boot proper is platform-specific. So, it should be cared in SoC/board files instead of common/spl/spl.c. As you see SPL is the acronym of Secondary Program Loader, there is generally something that runs before SPL (the First one is usually Boot ROM). How to wake up slave cores from the Boot ROM is really SoC specific. So, the intention for the spin table support is to bring the slave cores into U-Boot proper in an SoC specific manner. (this must be done after relocation. see below.) If you bring the slaves into SPL, it is SoC own code responsibility to transfer them to U-Boot proper. The Spin Table defines the interface between a boot-loader and Linux kernel. It is unrelated to the interface between SPL and U-Boot proper. One more thing is missing in the commit; spl_image->entry_point points to the entry address of U-Boot *before* relocation. U-Boot relocates itself between board_init_f() and board_init_r(). This means the master CPU sees the different copy of the spin code than the slave CPUs enter. The spin_table_update_dt() protects the code *after* relocation. As a result, the slave CPUs spin in unprotected code, which leads to unstable behavior. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
65f3219661
commit
7b74c4b60b
@ -167,14 +167,6 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
|
||||
(image_entry_noargs_t)spl_image->entry_point;
|
||||
|
||||
debug("image entry point: 0x%lX\n", spl_image->entry_point);
|
||||
#if defined(CONFIG_ARMV8_SPIN_TABLE) && defined(CONFIG_ARMV8_MULTIENTRY)
|
||||
/*
|
||||
* Release all slave cores from CPU_RELEASE_ADDR so they could
|
||||
* arrive to the spin-table code in start.S of the u-boot
|
||||
*/
|
||||
*(ulong *)CPU_RELEASE_ADDR = (ulong)spl_image->entry_point;
|
||||
#endif
|
||||
|
||||
image_entry();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user