[Skiboot] [RFC PATCH v3 3/6] Add memcons support for ultravisor

Ryan Grimm grimm at linux.ibm.com
Thu Jan 23 02:13:51 AEDT 2020


From: Madhavan Srinivasan <maddy at linux.vnet.ibm.com>

The ultravisor console buffer is provided at offset 0x01100000 from the
skiboot base.

Signed-off-by: Madhavan Srinivasan <maddy at linux.vnet.ibm.com>
Signed-off-by: Santosh Sivaraj <santosh at fossix.org>
---
 hw/ultravisor.c            | 14 ++++++++++++++
 include/console.h          |  3 +++
 include/debug_descriptor.h |  1 +
 include/mem-map.h          | 16 ++++++++++------
 4 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/hw/ultravisor.c b/hw/ultravisor.c
index 4222f212..d55d752b 100644
--- a/hw/ultravisor.c
+++ b/hw/ultravisor.c
@@ -11,6 +11,8 @@
 #include <inttypes.h>
 #include <ultravisor.h>
 #include <mem_region.h>
+#include <debug_descriptor.h>
+#include <console.h>
 #include <ultravisor-api.h>
 #include <libfdt/libfdt.h>
 #include <libstb/container.h>
@@ -20,6 +22,14 @@ static size_t uv_image_size;
 struct xz_decompress *uv_xz = NULL;
 static struct uv_opal *uv_opal;
 
+struct memcons uv_memcons __section(".data.memcons") = {
+	.magic		= MEMCONS_MAGIC,
+	.obuf_phys	= INMEM_UV_CON_START,
+	.ibuf_phys	= INMEM_UV_CON_START + INMEM_UV_CON_OUT_LEN,
+	.obuf_size	= INMEM_UV_CON_OUT_LEN,
+	.ibuf_size	= INMEM_UV_CON_IN_LEN,
+};
+
 const char * wrap_key_prop_str[] = {
 	"wrapping-key-passwd",
 	"wrapping-key-publicname",
@@ -321,6 +331,10 @@ void init_uv()
 	}
 
 	uv_opal->uv_base_addr = uv_dt_reg;
+	uv_opal->uv_mem = (__be64)&uv_memcons;
+
+	dt_add_property_u64(uv_fw_node, "memcons", (u64)&uv_memcons);
+	debug_descriptor.uv_memcons_phys = (u64)&uv_memcons;
 
 	if (!(sys_fdt_addr = (__be64)create_dtb(dt_root, false)))
 		prerror("UV: Failed to create system fdt\n");
diff --git a/include/console.h b/include/console.h
index 61448e28..1e7c2a10 100644
--- a/include/console.h
+++ b/include/console.h
@@ -28,9 +28,12 @@ struct memcons {
 };
 
 extern struct memcons memcons;
+extern struct memcons uv_memcons;
 
 #define INMEM_CON_IN_LEN	16
 #define INMEM_CON_OUT_LEN	(INMEM_CON_LEN - INMEM_CON_IN_LEN)
+#define INMEM_UV_CON_IN_LEN	16
+#define INMEM_UV_CON_OUT_LEN	(INMEM_UV_CON_LEN - INMEM_UV_CON_IN_LEN)
 
 /* Console driver */
 struct con_ops {
diff --git a/include/debug_descriptor.h b/include/debug_descriptor.h
index cbe9293e..949e3d92 100644
--- a/include/debug_descriptor.h
+++ b/include/debug_descriptor.h
@@ -20,6 +20,7 @@ struct debug_descriptor {
 
 	/* Memory console */
 	__be64	memcons_phys;
+	__be64	uv_memcons_phys;
 	__be32	memcons_tce;
 	__be32	memcons_obuf_tce;
 	__be32	memcons_ibuf_tce;
diff --git a/include/mem-map.h b/include/mem-map.h
index 8ac11e91..3686b92c 100644
--- a/include/mem-map.h
+++ b/include/mem-map.h
@@ -91,16 +91,20 @@
 #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)
+/* This is the location of our ultravisor console buffer at base + 17M */
+#define INMEM_UV_CON_START	(SKIBOOT_BASE + 0x01100000)
+#define INMEM_UV_CON_LEN	0x100000
+
+/* This is the location of HBRT console buffer at base + 18M */
+#define HBRT_CON_START		(SKIBOOT_BASE + 0x01200000)
 #define HBRT_CON_LEN  		0x100000
 
-/* Tell FSP to put the init data at base + 20M, allocate 8M */
-#define SPIRA_HEAP_BASE		(SKIBOOT_BASE + 0x01200000)
+/* Tell FSP to put the init data at base + 19M, allocate 8M */
+#define SPIRA_HEAP_BASE		(SKIBOOT_BASE + 0x01300000)
 #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_BASE	(SKIBOOT_BASE + 0x01c00000)
 #define PSI_TCE_TABLE_SIZE	0x00200000UL
 
 /* This is our dump result table after MPIPL. Hostboot will write to this
@@ -119,7 +123,7 @@
  *
  * (Ensure this has at least a 64k alignment)
  */
-#define SKIBOOT_SIZE		0x01c10000
+#define SKIBOOT_SIZE		0x01e00000
 
 /* We start laying out the CPU stacks from here, indexed by PIR
  * each stack is STACK_SIZE in size (naturally aligned power of
-- 
2.21.0



More information about the Skiboot mailing list