rules.h: Rename ENV_VERSTAGE to ENV_SEPARATE_VERSTAGE

When CONFIG_SEPARATE_VERSTAGE=n, all verstage code gets linked into the
appropriate calling stage (bootblock or romstage). This means that
ENV_VERSTAGE is actually 0, and instead ENV_BOOTBLOCK or ENV_ROMSTAGE
are 1. This keeps tripping up people who are just trying to write a
simple "are we in verstage (i.e. wherever the vboot init logic runs)"
check, e.g. for TPM init functions which may run in "verstage" or
ramstage depending on whether vboot is enabled. Those checks will not
work as intended for CONFIG_SEPARATE_VERSTAGE=n.

This patch renames ENV_VERSTAGE to ENV_SEPARATE_VERSTAGE to try to
clarify that this macro can really only be used to check whether code is
running in a *separate* verstage, and clue people in that they may need
to cover the linked-in verstage case as well.

Signed-off-by: Julius Werner <jwerner@chromium.org>
Change-Id: I2ff3a3c3513b3db44b3cff3d93398330cd3632ea
Reviewed-on: https://review.coreboot.org/c/coreboot/+/40582
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Julius Werner 2020-04-21 16:03:53 -07:00
parent d9f26edfec
commit 21a4053fde
19 changed files with 43 additions and 36 deletions

View File

@ -28,7 +28,7 @@ _start:
shrl $2, %ecx
rep stosl
#if ((ENV_VERSTAGE && CONFIG(VERSTAGE_DEBUG_SPINLOOP)) \
#if ((ENV_SEPARATE_VERSTAGE && CONFIG(VERSTAGE_DEBUG_SPINLOOP)) \
|| (ENV_ROMSTAGE && CONFIG(ROMSTAGE_DEBUG_SPINLOOP)))
/* Wait for a JTAG debugger to break in and set EBX non-zero */

View File

@ -32,7 +32,7 @@ SECTIONS
ROMSTAGE(CONFIG_ROMSTAGE_ADDR, 1M)
#include EARLY_MEMLAYOUT
#elif ENV_VERSTAGE
#elif ENV_SEPARATE_VERSTAGE
/* The 1M size is not allocated. It's just for basic size checking.
* Link at 32MiB address and rely on cbfstool to relocate to XIP. */
VERSTAGE(CONFIG_VERSTAGE_ADDR, 1M)

View File

@ -27,7 +27,7 @@
#include <commonlib/stdlib.h>
#define DMA_AVAILABLE ((CONFIG(SDHCI_ADMA_IN_BOOTBLOCK) && ENV_BOOTBLOCK) \
|| (CONFIG(SDHCI_ADMA_IN_VERSTAGE) && ENV_VERSTAGE) \
|| (CONFIG(SDHCI_ADMA_IN_VERSTAGE) && ENV_SEPARATE_VERSTAGE) \
|| (CONFIG(SDHCI_ADMA_IN_ROMSTAGE) && ENV_ROMSTAGE) \
|| ENV_POSTCAR || ENV_RAMSTAGE)

View File

@ -502,7 +502,7 @@ int tpm_vendor_init(struct tpm_chip *chip, unsigned int bus, uint32_t dev_addr)
if (cr50_i2c_probe(chip, &did_vid))
return -1;
if (ENV_VERSTAGE || ENV_BOOTBLOCK)
if (ENV_SEPARATE_VERSTAGE || ENV_BOOTBLOCK)
if (process_reset(chip))
return -1;

View File

@ -454,7 +454,7 @@ int tpm2_init(struct spi_slave *spi_if)
printk(BIOS_INFO, " done!\n");
if (ENV_VERSTAGE || ENV_BOOTBLOCK)
if (ENV_SEPARATE_VERSTAGE || ENV_BOOTBLOCK)
/*
* Claim locality 0, do it only during the first
* initialization after reset.

View File

@ -55,7 +55,7 @@ static inline struct ehci_debug_info *dbgp_ehci_info(void)
{
if (glob_dbg_info_p == NULL) {
struct ehci_debug_info *info;
if (ENV_BOOTBLOCK || ENV_VERSTAGE || ENV_ROMSTAGE) {
if (ENV_BOOTBLOCK || ENV_SEPARATE_VERSTAGE || ENV_ROMSTAGE) {
/* The message likely does not show if we hit this. */
if (sizeof(*info) > _car_ehci_dbg_info_size)
die("BUG: Increase ehci_dbg_info reserve in CAR");

View File

@ -161,7 +161,7 @@ static inline int cbmem_possibly_online(void)
if (ENV_BOOTBLOCK)
return 0;
if (ENV_VERSTAGE && CONFIG(VBOOT_STARTS_IN_BOOTBLOCK))
if (ENV_SEPARATE_VERSTAGE && CONFIG(VBOOT_STARTS_IN_BOOTBLOCK))
return 0;
return 1;

View File

@ -9,8 +9,8 @@ void cbmemc_init(void);
void cbmemc_tx_byte(unsigned char data);
#define __CBMEM_CONSOLE_ENABLE__ (CONFIG(CONSOLE_CBMEM) && \
(ENV_RAMSTAGE || ENV_VERSTAGE || ENV_POSTCAR || ENV_ROMSTAGE || \
(ENV_BOOTBLOCK && CONFIG(BOOTBLOCK_CONSOLE))))
(ENV_RAMSTAGE || ENV_SEPARATE_VERSTAGE || ENV_POSTCAR || \
ENV_ROMSTAGE || (ENV_BOOTBLOCK && CONFIG(BOOTBLOCK_CONSOLE))))
#if __CBMEM_CONSOLE_ENABLE__
static inline void __cbmemc_init(void) { cbmemc_init(); }

View File

@ -31,9 +31,9 @@ void die_notify(void);
#define __CONSOLE_ENABLE__ \
((ENV_BOOTBLOCK && CONFIG(BOOTBLOCK_CONSOLE)) || \
(ENV_POSTCAR && CONFIG(POSTCAR_CONSOLE)) || \
ENV_VERSTAGE || ENV_ROMSTAGE || ENV_RAMSTAGE || ENV_LIBAGESA || \
(ENV_SMM && CONFIG(DEBUG_SMI)))
(ENV_POSTCAR && CONFIG(POSTCAR_CONSOLE)) || \
ENV_SEPARATE_VERSTAGE || ENV_ROMSTAGE || ENV_RAMSTAGE || \
ENV_LIBAGESA || (ENV_SMM && CONFIG(DEBUG_SMI)))
#if __CONSOLE_ENABLE__
asmlinkage void console_init(void);

View File

@ -51,8 +51,8 @@ static inline void *uart_platform_baseptr(int idx)
void oxford_remap(unsigned int new_base);
#define __CONSOLE_SERIAL_ENABLE__ (CONFIG(CONSOLE_SERIAL) && \
(ENV_BOOTBLOCK || ENV_ROMSTAGE || ENV_RAMSTAGE || ENV_VERSTAGE || \
ENV_POSTCAR || (ENV_SMM && CONFIG(DEBUG_SMI))))
(ENV_BOOTBLOCK || ENV_ROMSTAGE || ENV_RAMSTAGE || ENV_SEPARATE_VERSTAGE \
|| ENV_POSTCAR || (ENV_SMM && CONFIG(DEBUG_SMI))))
#if __CONSOLE_SERIAL_ENABLE__
static inline void __uart_init(void)

View File

@ -18,7 +18,7 @@ int usb_can_rx_byte(int idx);
((ENV_BOOTBLOCK && CONFIG(USBDEBUG_IN_PRE_RAM)) || \
(ENV_ROMSTAGE && CONFIG(USBDEBUG_IN_PRE_RAM)) || \
(ENV_POSTCAR && CONFIG(USBDEBUG_IN_PRE_RAM)) || \
(ENV_VERSTAGE && CONFIG(USBDEBUG_IN_PRE_RAM)) || \
(ENV_SEPARATE_VERSTAGE && CONFIG(USBDEBUG_IN_PRE_RAM)) || \
ENV_RAMSTAGE))
#define USB_PIPE_FOR_CONSOLE 0

View File

@ -152,7 +152,7 @@
REGION(tpm_tcpa_log, addr, size, 16) \
_ = ASSERT(size >= 2K, "tpm tcpa log buffer must be at least 2K!");
#if ENV_VERSTAGE
#if ENV_SEPARATE_VERSTAGE
#define VERSTAGE(addr, sz) \
SYMBOL(verstage, addr) \
_everstage = _verstage + sz; \

View File

@ -14,7 +14,7 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
@ -26,7 +26,7 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
@ -38,7 +38,7 @@
#define ENV_ROMSTAGE 1
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
@ -50,19 +50,26 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 1
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
#define ENV_STRING "smm"
/*
* NOTE: "verstage" code may either run as a separate stage or linked into the
* bootblock/romstage, depending on the setting of CONFIG_SEPARATE_VERSTAGE. The
* ENV_SEPARATE_VERSTAGE macro will only return true for "verstage" code when
* CONFIG_SEPARATE_VERSTAGE=y, otherwise that code will have ENV_BOOTBLOCK or
* ENV_ROMSTAGE set (depending on the CONFIG_VBOOT_STARTS_IN_... options).
*/
#elif defined(__VERSTAGE__)
#define ENV_DECOMPRESSOR 0
#define ENV_BOOTBLOCK 0
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 1
#define ENV_SEPARATE_VERSTAGE 1
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
@ -74,7 +81,7 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 1
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
@ -86,7 +93,7 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 1
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
@ -98,7 +105,7 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 1
#define ENV_LIBAGESA 0
@ -110,7 +117,7 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 1
@ -126,7 +133,7 @@
#define ENV_ROMSTAGE 0
#define ENV_RAMSTAGE 0
#define ENV_SMM 0
#define ENV_VERSTAGE 0
#define ENV_SEPARATE_VERSTAGE 0
#define ENV_RMODULE 0
#define ENV_POSTCAR 0
#define ENV_LIBAGESA 0
@ -239,7 +246,7 @@
#define ENV_ROMSTAGE_OR_BEFORE \
(ENV_DECOMPRESSOR || ENV_BOOTBLOCK || ENV_ROMSTAGE || \
(ENV_VERSTAGE && CONFIG(VBOOT_STARTS_IN_BOOTBLOCK)))
(ENV_SEPARATE_VERSTAGE && CONFIG(VBOOT_STARTS_IN_BOOTBLOCK)))
#if CONFIG(ARCH_X86)
/* Indicates memory layout is determined with arch/x86/car.ld. */

View File

@ -106,7 +106,7 @@ size_t cbfs_load_and_decompress(const struct region_device *rdev, size_t offset,
return in_size;
case CBFS_COMPRESS_LZ4:
if ((ENV_BOOTBLOCK || ENV_VERSTAGE) &&
if ((ENV_BOOTBLOCK || ENV_SEPARATE_VERSTAGE) &&
!CONFIG(COMPRESS_PRERAM_STAGES))
return 0;
@ -125,7 +125,7 @@ size_t cbfs_load_and_decompress(const struct region_device *rdev, size_t offset,
case CBFS_COMPRESS_LZMA:
/* We assume here romstage and postcar are never compressed. */
if (ENV_BOOTBLOCK || ENV_VERSTAGE)
if (ENV_BOOTBLOCK || ENV_SEPARATE_VERSTAGE)
return 0;
if (ENV_ROMSTAGE && CONFIG(POSTCAR_STAGE))
return 0;
@ -236,8 +236,8 @@ int cbfs_prog_stage_load(struct prog *pstage)
/* Hacky way to not load programs over read only media. The stages
* that would hit this path initialize themselves. */
if ((ENV_BOOTBLOCK || ENV_VERSTAGE) && !CONFIG(NO_XIP_EARLY_STAGES) &&
CONFIG(BOOT_DEVICE_MEMORY_MAPPED)) {
if ((ENV_BOOTBLOCK || ENV_SEPARATE_VERSTAGE) &&
!CONFIG(NO_XIP_EARLY_STAGES) && CONFIG(BOOT_DEVICE_MEMORY_MAPPED)) {
void *mapping = rdev_mmap(fh, foffset, fsize);
rdev_munmap(fh, mapping);
if (mapping == load)

View File

@ -89,7 +89,7 @@ int get_recovery_mode_switch(void)
* The TPM recovery request is passed between stages through vboot data
* or cbmem depending on stage.
*/
if (ENV_VERSTAGE &&
if (ENV_SEPARATE_VERSTAGE &&
tlcl_cr50_get_recovery_button(&cr50_state) == TPM_SUCCESS &&
cr50_state)
state = REC_MODE_REQUESTED;

View File

@ -84,7 +84,7 @@ int get_recovery_mode_switch(void)
* The TPM recovery request is passed between stages through vboot data
* or cbmem depending on stage.
*/
if (ENV_VERSTAGE &&
if (ENV_SEPARATE_VERSTAGE &&
tlcl_cr50_get_recovery_button(&cr50_state) == TPM_SUCCESS &&
cr50_state)
state = REC_MODE_REQUESTED;

View File

@ -82,7 +82,7 @@ int get_recovery_mode_switch(void)
* The TPM recovery request is passed between stages through vboot data
* or cbmem depending on stage.
*/
if (ENV_VERSTAGE &&
if (ENV_SEPARATE_VERSTAGE &&
tlcl_cr50_get_recovery_button(&cr50_state) == TPM_SUCCESS &&
cr50_state)
state = REC_MODE_REQUESTED;

View File

@ -47,7 +47,7 @@ int vboot_locate_firmware(struct vb2_context *ctx, struct region_device *fw);
static inline int verification_should_run(void)
{
if (CONFIG(VBOOT_SEPARATE_VERSTAGE))
return ENV_VERSTAGE;
return ENV_SEPARATE_VERSTAGE;
else if (CONFIG(VBOOT_STARTS_IN_ROMSTAGE))
return ENV_ROMSTAGE;
else if (CONFIG(VBOOT_STARTS_IN_BOOTBLOCK))

View File

@ -157,7 +157,7 @@ static int nor_read(const struct spi_flash *flash, u32 addr, size_t len,
done += next;
}
if (ENV_BOOTBLOCK || ENV_VERSTAGE) {
if (ENV_BOOTBLOCK || ENV_SEPARATE_VERSTAGE) {
dma_buf = (uintptr_t)_dma_coherent;
dma_buf_len = REGION_SIZE(dma_coherent);
} else {