blob: 8f37f1ab42a21fabb5492c880b3ec3eec6641eae [file] [log] [blame]
Raul E Rangel899be1b2021-02-05 15:50:20 -07001/* SPDX-License-Identifier: GPL-2.0-only */
2
Felix Held6e2f5f22021-02-08 18:16:07 +01003#include <amdblocks/memmap.h>
Felix Helda90854d2021-02-10 04:05:27 +01004#include <amdblocks/smm.h>
Felix Held1a39aa02021-02-08 20:02:58 +01005#include <arch/bert_storage.h>
Raul E Rangel899be1b2021-02-05 15:50:20 -07006#include <console/console.h>
7#include <cbmem.h>
Felix Held6e2f5f22021-02-08 18:16:07 +01008#include <cpu/amd/msr.h>
9#include <cpu/x86/smm.h>
10#include <fsp/util.h>
11#include <FspGuids.h>
12#include <memrange.h>
Felix Held3aa757d2021-04-21 21:10:39 +020013#include <types.h>
Raul E Rangel899be1b2021-02-05 15:50:20 -070014
15void memmap_stash_early_dram_usage(void)
16{
17 struct memmap_early_dram *e;
18
19 e = cbmem_add(CBMEM_ID_CB_EARLY_DRAM, sizeof(*e));
20
21 if (!e)
22 die("ERROR: Failed to stash early dram usage!\n");
23
24 e->base = (uint32_t)(uintptr_t)_early_reserved_dram;
25 e->size = REGION_SIZE(early_reserved_dram);
26}
27
28const struct memmap_early_dram *memmap_get_early_dram_usage(void)
29{
30 struct memmap_early_dram *e = cbmem_find(CBMEM_ID_CB_EARLY_DRAM);
31
32 if (!e)
33 die("ERROR: Failed to read early dram usage!\n");
34
35 return e;
36}
Felix Held6e2f5f22021-02-08 18:16:07 +010037
Felix Held6e2f5f22021-02-08 18:16:07 +010038void smm_region(uintptr_t *start, size_t *size)
39{
40 static int once;
41 struct range_entry tseg;
42 int status;
43
44 *start = 0;
45 *size = 0;
46
47 status = fsp_find_range_hob(&tseg, AMD_FSP_TSEG_HOB_GUID.b);
48
49 if (status < 0) {
Julius Wernere9665952022-01-21 17:06:20 -080050 printk(BIOS_ERR, "unable to find TSEG HOB\n");
Felix Held6e2f5f22021-02-08 18:16:07 +010051 return;
52 }
53
54 *start = (uintptr_t)range_entry_base(&tseg);
55 *size = range_entry_size(&tseg);
56
57 if (!once) {
58 clear_tvalid();
59 once = 1;
60 }
61}
Felix Held1a39aa02021-02-08 20:02:58 +010062
63void bert_reserved_region(void **start, size_t *size)
64{
Felix Held8c3a8df2021-06-07 22:09:04 +020065 *start = cbmem_add(CBMEM_ID_ACPI_BERT, CONFIG_ACPI_BERT_SIZE);
Felix Held7608ea02021-04-21 21:21:11 +020066 *size = CONFIG_ACPI_BERT_SIZE;
67 printk(BIOS_INFO, "Reserved BERT region base: %p, size: 0x%lx\n", *start, *size);
Felix Held1a39aa02021-02-08 20:02:58 +010068}