Index: uspace/drv/char/sun4v-con/main.c
===================================================================
--- uspace/drv/char/sun4v-con/main.c	(revision 5f4c41b2707b6ce8c74bbc436ccf3231213e90a8)
+++ uspace/drv/char/sun4v-con/main.c	(revision f4cfd271c0ccaaa4d013ab45c31b049ca6f6c328)
@@ -74,10 +74,11 @@
 		return rc;
 
-	if (hw_res.mem_ranges.count != 1) {
+	if (hw_res.mem_ranges.count != 2) {
 		rc = EINVAL;
 		goto error;
 	}
 
-	res->base = RNGABS(hw_res.mem_ranges.ranges[0]);
+	res->in_base = RNGABS(hw_res.mem_ranges.ranges[0]);
+	res->out_base = RNGABS(hw_res.mem_ranges.ranges[1]);
 	return EOK;
 error:
Index: uspace/drv/char/sun4v-con/sun4v-con.c
===================================================================
--- uspace/drv/char/sun4v-con/sun4v-con.c	(revision 5f4c41b2707b6ce8c74bbc436ccf3231213e90a8)
+++ uspace/drv/char/sun4v-con/sun4v-con.c	(revision f4cfd271c0ccaaa4d013ab45c31b049ca6f6c328)
@@ -38,5 +38,4 @@
 #include <io/chardev_srv.h>
 #include <stdbool.h>
-#include <sysinfo.h>
 
 #include "sun4v-con.h"
@@ -115,5 +114,5 @@
 	ddf_fun_set_conn_handler(fun, sun4v_con_connection);
 
-	rc = physmem_map(res->base, 1, AS_AREA_READ | AS_AREA_WRITE,
+	rc = physmem_map(res->in_base, 1, AS_AREA_READ | AS_AREA_WRITE,
 	    (void *) &input_buffer);
 	if (rc != EOK) {
@@ -122,14 +121,7 @@
 	}
 
-	sysarg_t paddr;
-	rc = sysinfo_get_value("niagara.outbuf.address", &paddr);
-	if (rc != EOK) {
-		ddf_msg(LVL_ERROR, "Outbuf address information not found");
-		return rc;
-	}
-
 	output_fifo = (output_fifo_t *) AS_AREA_ANY;
 
-	rc = physmem_map(paddr, 1, AS_AREA_READ | AS_AREA_WRITE,
+	rc = physmem_map(res->out_base, 1, AS_AREA_READ | AS_AREA_WRITE,
 	    (void *) &output_fifo);
 	if (rc != EOK) {
@@ -150,4 +142,7 @@
 	if (input_buffer != (input_buffer_t) AS_AREA_ANY)
 		physmem_unmap((void *) input_buffer);
+
+	if (output_fifo != (output_fifo_t *) AS_AREA_ANY)
+		physmem_unmap((void *) output_fifo);
 
 	if (fun != NULL)
Index: uspace/drv/char/sun4v-con/sun4v-con.h
===================================================================
--- uspace/drv/char/sun4v-con/sun4v-con.h	(revision 5f4c41b2707b6ce8c74bbc436ccf3231213e90a8)
+++ uspace/drv/char/sun4v-con/sun4v-con.h	(revision f4cfd271c0ccaaa4d013ab45c31b049ca6f6c328)
@@ -44,5 +44,6 @@
 /** Sun4v console resources */
 typedef struct {
-	uintptr_t base;
+	uintptr_t in_base;
+	uintptr_t out_base;
 } sun4v_con_res_t;
 
Index: uspace/drv/platform/sun4v/sun4v.c
===================================================================
--- uspace/drv/platform/sun4v/sun4v.c	(revision 5f4c41b2707b6ce8c74bbc436ccf3231213e90a8)
+++ uspace/drv/platform/sun4v/sun4v.c	(revision f4cfd271c0ccaaa4d013ab45c31b049ca6f6c328)
@@ -75,4 +75,13 @@
 		}
 	},
+	{
+		.type = MEM_RANGE,
+		.res.mem_range = {
+			.address = 0,
+			.size = PAGE_SIZE,
+			.relative = true,
+			.endianness = LITTLE_ENDIAN
+		}
+	},
 };
 
@@ -223,5 +232,13 @@
 	}
 
-	console_data.pio_window.mem.base = paddr;
+	console_res[0].res.mem_range.address = paddr;
+
+	rc = sysinfo_get_value("niagara.outbuf.address", &paddr);
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "niagara.outbuf.address not set (%d)", rc);
+		return rc;
+	}
+
+	console_res[1].res.mem_range.address = paddr;
 	return EOK;
 }
