arch/x86,lib/thread: Enable thread support in romstage
This change does the following: * Pushes the cpu_info struct into the top of the stack (just like c_start.S). This is required so the cpu_info function works correctly. * Adds the thread.c to the romstage build. I only enabled this for romstage since I haven't done any tests in other stages, but in theory it should work for other stages. BUG=b:179699789 TEST=Boot guybrush with threads enabled in romstage Signed-off-by: Raul E Rangel <rrangel@chromium.org> Change-Id: I8e32e1c54dea0d0c85dd6d6753147099aa54b9b5 Reviewed-on: https://review.coreboot.org/c/coreboot/+/56494 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
parent
e279d90d4d
commit
ca0606e04f
|
@ -154,6 +154,8 @@ romstage-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
|
||||||
romstage-y += postcar_loader.c
|
romstage-y += postcar_loader.c
|
||||||
romstage-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
|
romstage-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
|
||||||
romstage-$(CONFIG_HAVE_CF9_RESET) += cf9_reset.c
|
romstage-$(CONFIG_HAVE_CF9_RESET) += cf9_reset.c
|
||||||
|
romstage-$(CONFIG_COOP_MULTITASKING) += thread.c
|
||||||
|
romstage-$(CONFIG_COOP_MULTITASKING) += thread_switch.S
|
||||||
|
|
||||||
romstage-srcs += $(wildcard $(src)/mainboard/$(MAINBOARDDIR)/romstage.c)
|
romstage-srcs += $(wildcard $(src)/mainboard/$(MAINBOARDDIR)/romstage.c)
|
||||||
romstage-libs ?=
|
romstage-libs ?=
|
||||||
|
|
|
@ -35,6 +35,14 @@ _start:
|
||||||
/* reset stack pointer to CAR/EARLYRAM stack */
|
/* reset stack pointer to CAR/EARLYRAM stack */
|
||||||
mov $_STACK_TOP, %esp
|
mov $_STACK_TOP, %esp
|
||||||
|
|
||||||
|
#if CONFIG(COOP_MULTITASKING)
|
||||||
|
/* Push the thread pointer. */
|
||||||
|
push $0
|
||||||
|
#endif
|
||||||
|
/* Push the CPU index and struct CPU */
|
||||||
|
push $0
|
||||||
|
push $0
|
||||||
|
|
||||||
/* clear .bss section as it is not shared */
|
/* clear .bss section as it is not shared */
|
||||||
cld
|
cld
|
||||||
xor %eax, %eax
|
xor %eax, %eax
|
||||||
|
|
|
@ -38,7 +38,7 @@ int thread_run_until(struct thread_handle *handle, enum cb_err (*func)(void *),
|
||||||
/* Waits until the thread has terminated and returns the error code */
|
/* Waits until the thread has terminated and returns the error code */
|
||||||
enum cb_err thread_join(struct thread_handle *handle);
|
enum cb_err thread_join(struct thread_handle *handle);
|
||||||
|
|
||||||
#if ENV_RAMSTAGE && CONFIG(COOP_MULTITASKING)
|
#if (ENV_RAMSTAGE || ENV_ROMSTAGE) && CONFIG(COOP_MULTITASKING)
|
||||||
|
|
||||||
struct thread {
|
struct thread {
|
||||||
int id;
|
int id;
|
||||||
|
|
|
@ -149,8 +149,6 @@ ramstage-$(CONFIG_COVERAGE) += libgcov.c
|
||||||
ramstage-y += edid.c
|
ramstage-y += edid.c
|
||||||
ramstage-y += edid_fill_fb.c
|
ramstage-y += edid_fill_fb.c
|
||||||
ramstage-y += memrange.c
|
ramstage-y += memrange.c
|
||||||
ramstage-$(CONFIG_COOP_MULTITASKING) += thread.c
|
|
||||||
ramstage-$(CONFIG_TIMER_QUEUE) += timer_queue.c
|
|
||||||
ramstage-$(CONFIG_GENERIC_GPIO_LIB) += gpio.c
|
ramstage-$(CONFIG_GENERIC_GPIO_LIB) += gpio.c
|
||||||
ramstage-$(CONFIG_GENERIC_UDELAY) += timer.c
|
ramstage-$(CONFIG_GENERIC_UDELAY) += timer.c
|
||||||
ramstage-y += b64_decode.c
|
ramstage-y += b64_decode.c
|
||||||
|
@ -160,6 +158,12 @@ ramstage-$(CONFIG_FLATTENED_DEVICE_TREE) += device_tree.c
|
||||||
ramstage-$(CONFIG_PAYLOAD_FIT_SUPPORT) += fit.c
|
ramstage-$(CONFIG_PAYLOAD_FIT_SUPPORT) += fit.c
|
||||||
ramstage-$(CONFIG_PAYLOAD_FIT_SUPPORT) += fit_payload.c
|
ramstage-$(CONFIG_PAYLOAD_FIT_SUPPORT) += fit_payload.c
|
||||||
|
|
||||||
|
romstage-$(CONFIG_TIMER_QUEUE) += timer_queue.c
|
||||||
|
ramstage-$(CONFIG_TIMER_QUEUE) += timer_queue.c
|
||||||
|
|
||||||
|
romstage-$(CONFIG_COOP_MULTITASKING) += thread.c
|
||||||
|
ramstage-$(CONFIG_COOP_MULTITASKING) += thread.c
|
||||||
|
|
||||||
romstage-y += cbmem_common.c
|
romstage-y += cbmem_common.c
|
||||||
romstage-y += imd_cbmem.c
|
romstage-y += imd_cbmem.c
|
||||||
romstage-y += imd.c
|
romstage-y += imd.c
|
||||||
|
|
Loading…
Reference in New Issue