[Skiboot] [PATCH 09/11] hdat: Parse hostboot memory reservations from HDAT
Vasant Hegde
hegdevasant at linux.vnet.ibm.com
Wed Sep 28 22:05:31 AEST 2016
Hostboot reserves some memory and passes via HDAT. This patch
adds code to parse node reservation details and marks it as
REGION_HW_RESERVED. Later mem_region_add_dt_reserved() populates
DT entry.
Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
---
hdata/memory.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/hdata/memory.c b/hdata/memory.c
index a8b9955..bb776fd 100644
--- a/hdata/memory.c
+++ b/hdata/memory.c
@@ -19,6 +19,7 @@
#include <vpd.h>
#include <ccan/str/str.h>
#include <libfdt/libfdt.h>
+#include <mem_region.h>
#include <types.h>
#include "spira.h"
@@ -383,6 +384,34 @@ static void get_msareas(struct dt_node *root,
}
}
+static void get_hb_reserved_mem(struct HDIF_common_hdr *ms_vpd)
+{
+ int count, i;
+ const struct msvpd_hb_reserved_mem *hb_resv_mem;
+
+ if (proc_gen < proc_gen_p9)
+ return;
+
+ count = HDIF_get_iarray_size(ms_vpd, MSVPD_IDATA_HB_RESERVED_MEM);
+ if (count <= 0) {
+ prerror("MS VPD: No hostboot reserved memory found\n");
+ return;
+ }
+
+ for (i = 0; i < count; i++) {
+ hb_resv_mem = HDIF_get_iarray_item(ms_vpd,
+ MSVPD_IDATA_HB_RESERVED_MEM,
+ i, NULL);
+ if (!CHECK_SPPTR(hb_resv_mem))
+ continue;
+
+#if !defined(TEST)
+ mem_reserve_hw(hb_resv_mem->label, hb_resv_mem->start_addr,
+ (hb_resv_mem->end_addr - hb_resv_mem->start_addr));
+#endif
+ }
+}
+
static bool __memory_parse(struct dt_node *root)
{
struct HDIF_common_hdr *ms_vpd;
@@ -431,6 +460,8 @@ static bool __memory_parse(struct dt_node *root)
get_msareas(root, ms_vpd);
+ get_hb_reserved_mem(ms_vpd);
+
prlog(PR_INFO, "MS VPD: Total MB of RAM: 0x%llx\n",
(long long)be64_to_cpu(tcms->total_in_mb));
--
2.5.5
More information about the Skiboot
mailing list