4409a5eef6
The cooperative multitasking support allows the boot state machine to be ran cooperatively with other threads of work. The main thread still continues to run the boot state machine (src/lib/hardwaremain.c). All callbacks from the state machine are still ran synchronously from within the main thread's context. Without any other code added the only change to the boot sequence when cooperative multitasking is enabled is the queueing of an idlle thread. The idle thread is responsible for ensuring progress is made by calling timer callbacks. The main thread can yield to any other threads in the system. That means that anyone that spins up a thread must ensure no shared resources are used from 2 or more execution contexts. The support is originally intentioned to allow for long work itesm with busy loops to occur in parallel during a boot. Note that the intention on when to yield a thread will be on calls to udelay(). Change-Id: Ia4d67a38665b12ce2643474843a93babd8a40c77 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/3206 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
149 lines
4.5 KiB
Makefile
149 lines
4.5 KiB
Makefile
#
|
|
# This file is part of the coreboot project.
|
|
#
|
|
# Copyright (C) 2009 coresystems GmbH
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; version 2 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
|
|
bootblock-y += cbfs.c
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMSET),y)
|
|
bootblock-y += memset.c
|
|
endif
|
|
bootblock-y += memchr.c
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMCPY),y)
|
|
bootblock-y += memcpy.c
|
|
endif
|
|
bootblock-y += memcmp.c
|
|
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMSET),y)
|
|
romstage-y += memset.c
|
|
rmodules-y += memset.c
|
|
endif
|
|
romstage-y += memchr.c
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMCPY),y)
|
|
romstage-y += memcpy.c
|
|
rmodules-y += memcpy.c
|
|
endif
|
|
romstage-y += memcmp.c
|
|
rmodules-y += memcmp.c
|
|
romstage-y += cbfs.c
|
|
romstage-y += lzma.c
|
|
#romstage-y += lzmadecode.c
|
|
romstage-$(CONFIG_CACHE_AS_RAM) += ramtest.c
|
|
romstage-$(CONFIG_CONSOLE_SERIAL8250) += uart8250.c
|
|
romstage-$(CONFIG_CONSOLE_SERIAL8250MEM) += uart8250mem.c
|
|
romstage-$(CONFIG_CONSOLE_CBMEM) += cbmem_console.c
|
|
romstage-$(CONFIG_CONSOLE_NE2K) += ne2k.c
|
|
romstage-$(CONFIG_USBDEBUG) += usbdebug.c
|
|
romstage-$(CONFIG_SPKMODEM) += spkmodem.c
|
|
|
|
romstage-$(CONFIG_COLLECT_TIMESTAMPS) += timestamp.c
|
|
romstage-$(CONFIG_EARLY_CBMEM_INIT) += cbmem.c
|
|
romstage-y += compute_ip_checksum.c
|
|
romstage-y += memmove.c
|
|
romstage-$(CONFIG_ARCH_X86) += gcc.c
|
|
|
|
ramstage-y += hardwaremain.c
|
|
ramstage-y += selfboot.c
|
|
ramstage-y += coreboot_table.c
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMSET),y)
|
|
ramstage-y += memset.c
|
|
endif
|
|
ramstage-y += memchr.c
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMCPY),y)
|
|
ramstage-y += memcpy.c
|
|
endif
|
|
ramstage-y += memcmp.c
|
|
ramstage-y += memmove.c
|
|
ramstage-y += malloc.c
|
|
smm-$(CONFIG_SMM_TSEG) += malloc.c
|
|
ramstage-y += delay.c
|
|
ramstage-y += fallback_boot.c
|
|
ramstage-y += compute_ip_checksum.c
|
|
ramstage-y += version.c
|
|
ramstage-y += cbfs.c
|
|
ramstage-y += lzma.c
|
|
#ramstage-y += lzmadecode.c
|
|
ramstage-y += stack.c
|
|
ramstage-$(CONFIG_ARCH_X86) += gcc.c
|
|
ramstage-y += clog2.c
|
|
ramstage-$(CONFIG_CONSOLE_SERIAL8250) += uart8250.c
|
|
ramstage-$(CONFIG_CONSOLE_SERIAL8250MEM) += uart8250mem.c
|
|
ramstage-$(CONFIG_CONSOLE_CBMEM) += cbmem_console.c
|
|
ramstage-$(CONFIG_USBDEBUG) += usbdebug.c
|
|
ramstage-$(CONFIG_SPKMODEM) += spkmodem.c
|
|
ramstage-$(CONFIG_BOOTSPLASH) += jpeg.c
|
|
ramstage-$(CONFIG_TRACE) += trace.c
|
|
ramstage-$(CONFIG_COLLECT_TIMESTAMPS) += timestamp.c
|
|
ramstage-$(CONFIG_COVERAGE) += libgcov.c
|
|
ramstage-$(CONFIG_MAINBOARD_DO_NATIVE_VGA_INIT) += edid.c
|
|
ramstage-y += memrange.c
|
|
ramstage-$(CONFIG_COOP_MULTITASKING) += thread.c
|
|
ramstage-$(CONFIG_TIMER_QUEUE) += timer_queue.c
|
|
|
|
# The CBMEM implementations are chosen based on CONFIG_DYNAMIC_CBMEM.
|
|
ifeq ($(CONFIG_DYNAMIC_CBMEM),y)
|
|
ramstage-y += dynamic_cbmem.c
|
|
romstage-y += dynamic_cbmem.c
|
|
else
|
|
ramstage-y += cbmem.c
|
|
romstage-$(CONFIG_HAVE_ACPI_RESUME) += cbmem.c
|
|
endif # CONFIG_DYNAMIC_CBMEM
|
|
ramstage-y += cbmem_info.c
|
|
|
|
ramstage-$(CONFIG_CONSOLE_NE2K) += ne2k.c
|
|
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMSET),y)
|
|
smm-y += memset.c
|
|
endif
|
|
ifneq ($(CONFIG_HAVE_ARCH_MEMCPY),y)
|
|
smm-y += memcpy.c
|
|
endif
|
|
smm-y += cbfs.c memcmp.c
|
|
smm-$(CONFIG_CONSOLE_SERIAL8250) += uart8250.c
|
|
smm-$(CONFIG_CONSOLE_SERIAL8250MEM) += uart8250mem.c
|
|
smm-$(CONFIG_USBDEBUG) += usbdebug.c
|
|
smm-y += gcc.c
|
|
|
|
$(obj)/lib/version.ramstage.o : $(obj)/build.h
|
|
|
|
OPTION_TABLE_H:=
|
|
ifeq ($(CONFIG_HAVE_OPTION_TABLE),y)
|
|
OPTION_TABLE_H:=$(obj)/option_table.h
|
|
endif
|
|
|
|
$(obj)/lib/uart8250mem.smm.o : $(OPTION_TABLE_H)
|
|
$(obj)/lib/uart8250.smm.o : $(OPTION_TABLE_H)
|
|
|
|
ifeq ($(CONFIG_RELOCATABLE_MODULES),y)
|
|
ramstage-y += rmodule.c
|
|
romstage-$(CONFIG_RELOCATABLE_RAMSTAGE) += rmodule.c
|
|
|
|
RMODULE_LDSCRIPT := $(src)/lib/rmodule.ld
|
|
RMODULE_LDFLAGS := -nostartfiles -shared -z defs -nostdlib -Bsymbolic -T $(RMODULE_LDSCRIPT)
|
|
|
|
# rmodule_link_rules is a function that should be called with:
|
|
# (1) the object name to link
|
|
# (2) the dependencies
|
|
# (3) heap size of the relocatable module
|
|
# It will create the necessary Make rules.
|
|
define rmodule_link
|
|
$(strip $(1)): $(strip $(2)) $$(RMODULE_LDSCRIPT) $$(obj)/ldoptions
|
|
$$(LD) $$(RMODULE_LDFLAGS) --defsym=__heap_size=$(strip $(3)) -o $$@ $(strip $(2))
|
|
$$(NM) -n $$@ > $$(basename $$@).map
|
|
endef
|
|
|
|
endif
|
|
|