aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/include/mem-map.h
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/include/mem-map.h
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/include/mem-map.h')
-rw-r--r--roms/skiboot/include/mem-map.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/roms/skiboot/include/mem-map.h b/roms/skiboot/include/mem-map.h
new file mode 100644
index 000000000..9250a63d5
--- /dev/null
+++ b/roms/skiboot/include/mem-map.h
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+/* Copyright 2013-2019 IBM Corp. */
+
+#ifndef __MEM_MAP_H
+#define __MEM_MAP_H
+
+/* This is our main offset for relocation. All our buffers
+ * are offset from that and our code relocates itself to
+ * that location
+ */
+#define SKIBOOT_BASE 0x30000000
+
+/* Stack size set to 32K, 16K for general stack and 16K for an emergency
+ * stack.
+ */
+#define STACK_SHIFT 15
+#define STACK_SIZE (1 << STACK_SHIFT)
+
+/* End of the exception region we copy from 0x0. 0x0-0x100 will have
+ * IPL data and is not actually for exception vectors.
+ */
+#define EXCEPTION_VECTORS_END 0x3000
+
+#define NACA_OFF 0x4000
+
+/* The NACA and other stuff in head.S need to be at the start: we
+ * give it 64k before placing the SPIRA and related data.
+ */
+#define SPIRA_OFF 0x00010000
+#define SPIRA_SIZE 0x400
+#define SPIRAH_OFF 0x00010400
+#define SPIRAH_SIZE 0x300
+
+#define PROC_DUMP_AREA_OFF (SPIRAH_OFF + SPIRAH_SIZE)
+#define PROC_DUMP_AREA_SIZE 0x100
+
+/* Actual SPIRA size is lesser than 1K (presently 0x340 bytes).
+ * Use 1K for legacy SPIRA.
+ *
+ * SPIRA-H is lesser than 768 bytes (presently we use 288 bytes)
+ * Use 768 bytes for SPIRAH.
+ *
+ * Use 256 bytes for processor dump area. (presently we use
+ * sizeof(proc_dump_area) = 0x30 bytes).
+ *
+ * Then follow with for proc_init_data (aka PROCIN).
+ * These need to be at fixed addresses in case we're ever little
+ * endian: linker can't endian reverse a pointer for us. Text, data
+ * et. al. follows this.
+ */
+#define PROCIN_OFF (SPIRA_OFF + 0x800)
+
+/* Initial MDST and MDDT tables like PROCIN, we need fixed addresses,
+ * we leave a 2k gap for PROCIN
+ */
+#define MDST_TABLE_OFF (SPIRA_OFF + 0x1000)
+#define MDST_TABLE_SIZE 0x400
+
+#define MDDT_TABLE_OFF (SPIRA_OFF + 0x1400)
+#define MDDT_TABLE_SIZE 0x400
+
+/* Like MDST and MDDT, we need fixed address for CPU control header.
+ * We leave a 2k gap for MDST. CPU_CTL table is of size ~4k
+ */
+#define CPU_CTL_OFF (SPIRA_OFF + 0x1800)
+
+/* We keep a gap of 5M for skiboot text & bss for now. We will
+ * then we have our heap which goes up to base + 14M (so 11M for
+ * now, though we can certainly reduce that a lot).
+ *
+ * Ideally, we should fix the heap end and use _end to basically
+ * initialize our heap so that it covers anything from _end to
+ * that heap end, avoiding wasted space.
+ *
+ * That's made a bit tricky however due to how we create those
+ * regions statically in mem_region.c, but still on the list of
+ * things to improve.
+ *
+ * As of A Long Time Ago (2014/4/6), we used approc 512K for skiboot
+ * core and 2M of heap on a 1 socket machine.
+ *
+ * As of still a Long Time Ago (2015/5/7) we used approx 800k for skiboot,
+ * 500k HEAP for mambo boot.
+ *
+ * As of mid-2019, a 2 socket Romulus uses ~4MB heap.
+ */
+#define HEAP_BASE (SKIBOOT_BASE + 0x00600000)
+#define HEAP_SIZE 0x00a00000
+
+/* This is the location of our console buffer at base + 16M */
+#define INMEM_CON_START (SKIBOOT_BASE + 0x01000000)
+#define INMEM_CON_LEN 0x100000
+
+/* This is the location of HBRT console buffer at base + 17M */
+#define HBRT_CON_START (SKIBOOT_BASE + 0x01100000)
+#define HBRT_CON_LEN 0x100000
+
+/* Tell FSP to put the init data at base + 20M, allocate 8M */
+#define SPIRA_HEAP_BASE (SKIBOOT_BASE + 0x01200000)
+#define SPIRA_HEAP_SIZE 0x00800000
+
+/* This is our PSI TCE table. It's 256K entries on P8 */
+#define PSI_TCE_TABLE_BASE (SKIBOOT_BASE + 0x01a00000)
+#define PSI_TCE_TABLE_SIZE 0x00200000UL
+
+/* This is our dump result table after MPIPL. Hostboot will write to this
+ * memory after moving memory content from source to destination memory.
+ */
+#define MDRT_TABLE_BASE (SKIBOOT_BASE + 0x01c00000)
+#define MDRT_TABLE_SIZE 0x00008000
+
+/* This is our dump metadata area. We will use this memory to save metadata
+ * (like crashing CPU details, payload tags) before triggering MPIPL.
+ */
+#define DUMP_METADATA_AREA_BASE (SKIBOOT_BASE + 0x01c08000)
+#define DUMP_METADATA_AREA_SIZE 0x8000
+
+/* Total size of the above area
+ *
+ * (Ensure this has at least a 64k alignment)
+ */
+#define SKIBOOT_SIZE 0x01c10000
+
+/* We start laying out the CPU stacks from here, indexed by PIR
+ * each stack is STACK_SIZE in size (naturally aligned power of
+ * two) and the bottom of the stack contains the cpu thread
+ * structure for the processor, so it can be obtained by a simple
+ * bit mask from the stack pointer. Within the CPU stack is divided
+ * into a normal and emergency stack to cope with a single level of
+ * re-entrancy.
+ *
+ * The size of this array is dynamically determined at boot time
+ */
+#define CPU_STACKS_BASE (SKIBOOT_BASE + SKIBOOT_SIZE)
+
+/*
+ * Address at which we load the kernel LID. This is also where
+ * we expect a passed-in kernel if booting without FSP and
+ * without a built-in kernel.
+ */
+#define KERNEL_LOAD_BASE ((void *)0x20000000)
+#define KERNEL_LOAD_SIZE 0x08000000
+
+#define INITRAMFS_LOAD_BASE KERNEL_LOAD_BASE + KERNEL_LOAD_SIZE
+#define INITRAMFS_LOAD_SIZE 0x08000000
+
+/* Size allocated to build the device-tree */
+#define DEVICE_TREE_MAX_SIZE 0x80000
+
+
+#endif /* __MEM_MAP_H */