summaryrefslogtreecommitdiff
path: root/src/soc/intel/common/block/systemagent
diff options
context:
space:
mode:
authorMichael Niewöhner <foss@mniewoehner.de>2019-10-19 15:17:06 +0200
committerNico Huber <nico.h@gmx.de>2019-11-04 19:24:49 +0000
commite75a64f822931a5fbdd80f20c4d168a5c346e01a (patch)
treebe951bed3220dac1d7a9fc34c8e534da53f55311 /src/soc/intel/common/block/systemagent
parent68da45479fd289281017768a8cfa51b2f642ac07 (diff)
soc/intel: skl,cnl,icl: consolidate ebda and memmap
As of CB:36136 ebda and memmap are identical for skl, cnl and icl, thus move them to common code. Tested successfully on X11SSM-F Change-Id: I9a20c814d2a6874fcb4ff99ef1a7825d891f74e2 Signed-off-by: Michael Niewöhner <foss@mniewoehner.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/36137 Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/intel/common/block/systemagent')
-rw-r--r--src/soc/intel/common/block/systemagent/memmap.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/systemagent/memmap.c b/src/soc/intel/common/block/systemagent/memmap.c
index ea22aa6d18..809c13a1ff 100644
--- a/src/soc/intel/common/block/systemagent/memmap.c
+++ b/src/soc/intel/common/block/systemagent/memmap.c
@@ -19,15 +19,82 @@
#include <console/console.h>
#include <cpu/x86/mtrr.h>
#include <cpu/x86/smm.h>
+#include <fsp/util.h>
+#include <intelblocks/ebda.h>
#include <intelblocks/systemagent.h>
#include <stdlib.h>
+/*
+ * Expected Host Memory Map (we don't know 100% and not all regions are present on all SoCs):
+ *
+ * +---------------------------+ TOUUD
+ * | |
+ * +---------------------------+ TOM (if mem > 4GB)
+ * | CSME UMA (if mem > 4 GiB) |
+ * +---------------------------+ TOUUD
+ * | |
+ * +---------------------------+ 4GiB
+ * | PCI Address Space |
+ * +---------------------------+ TOM (if mem < 4GB)
+ * | CSME UMA (if mem < 4 GiB) |
+ * +---------------------------+ TOLUD (also maps into MC address space)
+ * | iGD / DSM |
+ * +---------------------------+ BDSM
+ * | GTT / GSM |
+ * +---------------------------+ TOLM
+ * | TSEG |
+ * +---------------------------+ TSEGMB
+ * | DMA Protected Region |
+ * +---------------------------+ DPR
+ * | PRM (C6DRAM/SGX) |
+ * +---------------------------+ PRMRR
+ * | Probeless Trace |
+ * +---------------------------+ ME Stolen
+ * | PTT |
+ * +---------------------------+ TOLUM / top_of_ram / cbmem_top
+ * | CBMEM Root |
+ * +---------------------------+
+ * | FSP Reserved Memory |
+ * +---------------------------+
+ * | various CBMEM entries |
+ * +---------------------------+ top_of_stack (8 byte aligned)
+ * | stack (CBMEM entry) |
+ * +---------------------------+ FSP TOLUM
+ * | |
+ * +---------------------------+ 0
+ */
+
void smm_region(uintptr_t *start, size_t *size)
{
*start = sa_get_tseg_base();
*size = sa_get_tseg_size();
}
+#if CONFIG(SOC_INTEL_COMMON_BLOCK_EBDA)
+void fill_memmap_ebda(struct ebda_config *cfg)
+{
+ struct range_entry tolum;
+
+ fsp_find_bootloader_tolum(&tolum);
+ cfg->cbmem_top = range_entry_end(&tolum);
+}
+
+void cbmem_top_init(void)
+{
+ /* Initialize EBDA area */
+ initialize_ebda_area();
+}
+
+void *cbmem_top_chipset(void)
+{
+ struct ebda_config ebda_cfg;
+
+ retrieve_ebda_object(&ebda_cfg);
+
+ return (void *)(uintptr_t)ebda_cfg.cbmem_top;
+}
+#endif
+
void fill_postcar_frame(struct postcar_frame *pcf)
{
uintptr_t top_of_ram;