xref: /aosp_15_r20/external/coreboot/src/drivers/intel/fsp2_0/hob_verify.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <cbmem.h>
4 #include <console/console.h>
5 #include <fsp/util.h>
6 
fsp_verify_memory_init_hobs(void)7 void fsp_verify_memory_init_hobs(void)
8 {
9 	struct range_entry fsp_mem;
10 	struct range_entry tolum;
11 
12 	/* Verify the size of the TOLUM range */
13 	fsp_find_bootloader_tolum(&tolum);
14 	if (range_entry_size(&tolum) < cbmem_overhead_size()) {
15 		printk(BIOS_CRIT,
16 			"FSP_BOOTLOADER_TOLUM_SIZE: 0x%08llx < 0x%08zx\n",
17 			range_entry_size(&tolum), cbmem_overhead_size());
18 		die("FSP_BOOTLOADER_TOLUM_HOB too small!\n");
19 	}
20 
21 	/* Verify the bootloader tolum is above the FSP reserved area */
22 	fsp_find_reserved_memory(&fsp_mem);
23 	if (range_entry_end(&tolum) <= range_entry_base(&fsp_mem)) {
24 		printk(BIOS_CRIT,
25 			"TOLUM end: 0x%08llx != 0x%08llx: FSP rsvd base\n",
26 			range_entry_end(&tolum), range_entry_base(&fsp_mem));
27 		die("FSP reserved region after BIOS TOLUM!\n");
28 	}
29 	if (range_entry_base(&tolum) < range_entry_end(&fsp_mem)) {
30 		printk(BIOS_CRIT,
31 			"TOLUM base: 0x%08llx < 0x%08llx: FSP rsvd end\n",
32 			range_entry_base(&tolum), range_entry_end(&fsp_mem));
33 		die("FSP reserved region overlaps BIOS TOLUM!\n");
34 	}
35 
36 	/* Verify that the FSP reserved area immediately follows the BIOS
37 	 * reserved area
38 	 */
39 	if (range_entry_base(&tolum) != range_entry_end(&fsp_mem)) {
40 		printk(BIOS_CRIT,
41 			"TOLUM base: 0x%08llx != 0x%08llx: FSP rsvd end\n",
42 			range_entry_base(&tolum), range_entry_end(&fsp_mem));
43 		die("Space between FSP reserved region and BIOS TOLUM!\n");
44 	}
45 
46 	if (range_entry_end(&tolum) != cbmem_top()) {
47 		printk(BIOS_CRIT, "TOLUM end: 0x%08llx != %lx: cbmem_top\n",
48 			range_entry_end(&tolum), cbmem_top());
49 		die("Space between cbmem_top and BIOS TOLUM!\n");
50 	}
51 }
52