diff options
-rw-r--r-- | src/arch/x86/car.ld | 2 | ||||
-rw-r--r-- | src/include/memlayout.h | 14 | ||||
-rw-r--r-- | src/security/vboot/common.c | 23 | ||||
-rw-r--r-- | src/soc/nvidia/tegra124/include/soc/memlayout.ld | 2 | ||||
-rw-r--r-- | src/soc/qualcomm/ipq40xx/include/soc/memlayout.ld | 2 | ||||
-rw-r--r-- | src/soc/qualcomm/ipq806x/include/soc/memlayout.ld | 2 | ||||
-rw-r--r-- | src/soc/qualcomm/qcs405/include/soc/memlayout.ld | 2 | ||||
-rw-r--r-- | src/soc/qualcomm/sdm845/include/soc/memlayout.ld | 2 | ||||
-rw-r--r-- | src/soc/samsung/exynos5250/include/soc/memlayout.ld | 2 |
9 files changed, 21 insertions, 30 deletions
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld index 4637362060..37fb087ebd 100644 --- a/src/arch/x86/car.ld +++ b/src/arch/x86/car.ld @@ -29,7 +29,7 @@ /* Vboot work buffer only needs to be available when verified boot * starts in bootblock. */ #if CONFIG(VBOOT_STARTS_IN_BOOTBLOCK) - VBOOT2_WORK(., 16K) + VBOOT2_WORK(., 12K) #endif /* Vboot measured boot TCPA log measurements. * Needs to be transferred until CBMEM is available diff --git a/src/include/memlayout.h b/src/include/memlayout.h index 1ccb9f7495..273a80d240 100644 --- a/src/include/memlayout.h +++ b/src/include/memlayout.h @@ -19,6 +19,7 @@ #define __MEMLAYOUT_H #include <arch/memlayout.h> +#include <vb2_constants.h> /* Macros that the architecture can override. */ #ifndef ARCH_POINTER_ALIGN_SIZE @@ -157,12 +158,13 @@ REGION(ramstage, addr, sz, 1) #endif -/* Careful: required work buffer size depends on RW properties such as key size - * and algorithm -- what works for you might stop working after an update. Do - * NOT lower the asserted minimum without consulting vboot devs (rspangler)! */ -#define VBOOT2_WORK(addr, size) \ - REGION(vboot2_work, addr, size, 16) \ - _ = ASSERT(size >= 12K, "vboot2 work buffer must be at least 12K!"); +/* VBOOT2_WORK must always use VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE for its + * size argument. The constant is imported via vb2_workbuf_size.h. */ +#define VBOOT2_WORK(addr, sz) \ + REGION(vboot2_work, addr, sz, 16) \ + _ = ASSERT(sz == VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE, \ + STR(vboot2 work buffer size must be equivalent to \ + VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE! (sz))); #define VBOOT2_TPM_LOG(addr, size) \ REGION(vboot2_tpm_log, addr, size, 16) \ diff --git a/src/security/vboot/common.c b/src/security/vboot/common.c index 2348d31088..5b49ebffb7 100644 --- a/src/security/vboot/common.c +++ b/src/security/vboot/common.c @@ -25,19 +25,6 @@ #include <security/vboot/symbols.h> #include <security/vboot/vboot_common.h> -/* TODO(kitching): Use VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE instead. */ -static size_t vboot_working_data_size(void) -{ - if (CONFIG(VBOOT_STARTS_IN_ROMSTAGE)) - return 12 * KiB; - - else if (CONFIG(VBOOT_STARTS_IN_BOOTBLOCK) && - preram_symbols_available()) - return REGION_SIZE(vboot2_work); - - die("impossible!"); -} - struct vboot_working_data * const vboot_get_working_data(void) { struct vboot_working_data *wd = NULL; @@ -58,16 +45,17 @@ void vboot_init_work_context(struct vb2_context *ctx) { struct vboot_working_data *wd; - /* First initialize the working data struct. */ + /* First initialize the working data region. */ wd = vboot_get_working_data(); - memset(wd, 0, sizeof(struct vboot_working_data)); + memset(wd, 0, VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE); /* * vboot prefers 16-byte alignment. This takes away 16 bytes * from the VBOOT2_WORK region, but the vboot devs said that's okay. */ wd->buffer_offset = ALIGN_UP(sizeof(*wd), 16); - wd->buffer_size = vboot_working_data_size() - wd->buffer_offset; + wd->buffer_size = VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE + - wd->buffer_offset; /* Initialize the vb2_context. */ memset(ctx, 0, sizeof(*ctx)); @@ -157,7 +145,8 @@ ROMSTAGE_CBMEM_INIT_HOOK(vboot_migrate_cbmem) static void vboot_setup_cbmem(int unused) { struct vboot_working_data *wd_cbmem = - cbmem_add(CBMEM_ID_VBOOT_WORKBUF, vboot_working_data_size()); + cbmem_add(CBMEM_ID_VBOOT_WORKBUF, + VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE); assert(wd_cbmem != NULL); } ROMSTAGE_CBMEM_INIT_HOOK(vboot_setup_cbmem) diff --git a/src/soc/nvidia/tegra124/include/soc/memlayout.ld b/src/soc/nvidia/tegra124/include/soc/memlayout.ld index 40af0d5218..7e2f9ec2af 100644 --- a/src/soc/nvidia/tegra124/include/soc/memlayout.ld +++ b/src/soc/nvidia/tegra124/include/soc/memlayout.ld @@ -29,7 +29,7 @@ SECTIONS TTB(0x40000000, 16K + 32) PRERAM_CBMEM_CONSOLE(0x40004020, 6K - 32) PRERAM_CBFS_CACHE(0x40005800, 16K) - VBOOT2_WORK(0x40009800, 16K) + VBOOT2_WORK(0x40009800, 12K) VBOOT2_TPM_LOG(0x4000D800, 2K) STACK(0x4000E000, 8K) BOOTBLOCK(0x40010000, 30K) diff --git a/src/soc/qualcomm/ipq40xx/include/soc/memlayout.ld b/src/soc/qualcomm/ipq40xx/include/soc/memlayout.ld index 5e9707754d..a69b60bfb9 100644 --- a/src/soc/qualcomm/ipq40xx/include/soc/memlayout.ld +++ b/src/soc/qualcomm/ipq40xx/include/soc/memlayout.ld @@ -46,7 +46,7 @@ SECTIONS REGION_START(wifi_imem_1, 0x0A8C0000) BOOTBLOCK(0x0A8C0000, 24K) OVERLAP_VERSTAGE_ROMSTAGE(0x0A8C6000, 64K) - VBOOT2_WORK(0x0A8D6000, 16K) + VBOOT2_WORK(0x0A8D6000, 12K) PRERAM_CBMEM_CONSOLE(0x0A8DA000, 32K) TIMESTAMP(0x0A8E2000, 1K) diff --git a/src/soc/qualcomm/ipq806x/include/soc/memlayout.ld b/src/soc/qualcomm/ipq806x/include/soc/memlayout.ld index 6ff2b77608..25db17587c 100644 --- a/src/soc/qualcomm/ipq806x/include/soc/memlayout.ld +++ b/src/soc/qualcomm/ipq806x/include/soc/memlayout.ld @@ -27,7 +27,7 @@ SECTIONS /* DDR(0x2A000000, 48K) */ BOOTBLOCK(0x2A00C000, 24K) OVERLAP_VERSTAGE_ROMSTAGE(0x2A012000, 64K) - VBOOT2_WORK(0x2A022000, 16K) + VBOOT2_WORK(0x2A022000, 12K) PRERAM_CBMEM_CONSOLE(0x2A026000, 32K) TIMESTAMP(0x2A02E000, 1K) diff --git a/src/soc/qualcomm/qcs405/include/soc/memlayout.ld b/src/soc/qualcomm/qcs405/include/soc/memlayout.ld index 8ed258bf52..68642d67a2 100644 --- a/src/soc/qualcomm/qcs405/include/soc/memlayout.ld +++ b/src/soc/qualcomm/qcs405/include/soc/memlayout.ld @@ -34,7 +34,7 @@ SECTIONS REGION(fw_reserved2, 0x8C19000, 0x16000, 4096) BOOTBLOCK(0x8C2F000, 40K) TTB(0x8C39000, 56K) - VBOOT2_WORK(0x8C47000, 16K) + VBOOT2_WORK(0x8C47000, 12K) STACK(0x8C4B000, 16K) TIMESTAMP(0x8C4F000, 1K) PRERAM_CBMEM_CONSOLE(0x8C4F400, 32K) diff --git a/src/soc/qualcomm/sdm845/include/soc/memlayout.ld b/src/soc/qualcomm/sdm845/include/soc/memlayout.ld index 5d99a8e24e..7063c6910e 100644 --- a/src/soc/qualcomm/sdm845/include/soc/memlayout.ld +++ b/src/soc/qualcomm/sdm845/include/soc/memlayout.ld @@ -35,7 +35,7 @@ SECTIONS REGION(fw_reserved2, 0x14800000, 0x16000, 4096) BOOTBLOCK(0x14816000, 40K) TTB(0x14820000, 56K) - VBOOT2_WORK(0x1482E000, 16K) + VBOOT2_WORK(0x1482E000, 12K) STACK(0x14832000, 16K) TIMESTAMP(0x14836000, 1K) PRERAM_CBMEM_CONSOLE(0x14836400, 32K) diff --git a/src/soc/samsung/exynos5250/include/soc/memlayout.ld b/src/soc/samsung/exynos5250/include/soc/memlayout.ld index ab79594003..0bd319e45d 100644 --- a/src/soc/samsung/exynos5250/include/soc/memlayout.ld +++ b/src/soc/samsung/exynos5250/include/soc/memlayout.ld @@ -33,7 +33,7 @@ SECTIONS TTB(0x2058000, 16K) PRERAM_CBFS_CACHE(0x205C000, 78K) VBOOT2_TPM_LOG(0x206F800, 2K) - VBOOT2_WORK(0x2070000, 16K) + VBOOT2_WORK(0x2070000, 12K) STACK(0x2074000, 16K) SRAM_END(0x2078000) |