Index: uspace/drv/intctl/obio/obio.c
===================================================================
--- uspace/drv/intctl/obio/obio.c	(revision 48adf0f5acfc6c801de63d3051a4a732c9e3e07c)
+++ uspace/drv/intctl/obio/obio.c	(revision b63b02ec1ec110cc8397bdc301aaba9426cf74c4)
@@ -68,7 +68,4 @@
 #define INO_MASK	0x1f
 
-static uintptr_t base_phys;
-static volatile uint64_t *base_virt = (volatile uint64_t *) AS_AREA_ANY;
-
 /** Handle one connection to obio.
  *
@@ -81,4 +78,5 @@
 	ipc_callid_t callid;
 	ipc_call_t call;
+	obio_t *obio;
 
 	/*
@@ -86,4 +84,6 @@
 	 */
 	async_answer_0(iid, EOK);
+
+	obio = (obio_t *)ddf_dev_data_get(ddf_fun_get_dev((ddf_fun_t *)arg));
 
 	while (1) {
@@ -94,5 +94,5 @@
 		case IRC_ENABLE_INTERRUPT:
 			inr = IPC_GET_ARG1(call);
-			base_virt[OBIO_IMR(inr & INO_MASK)] |= (1UL << 31);
+			((volatile uint64_t *)(obio->regs))[OBIO_IMR(inr & INO_MASK)] |= (1UL << 31);
 			async_answer_0(callid, EOK);
 			break;
@@ -103,5 +103,5 @@
 		case IRC_CLEAR_INTERRUPT:
 			inr = IPC_GET_ARG1(call);
-			base_virt[OBIO_CIR(inr & INO_MASK)] = 0;
+			((volatile uint64_t *)(obio->regs))[OBIO_CIR(inr & INO_MASK)] = 0;
 			async_answer_0(callid, EOK);
 			break;
@@ -117,10 +117,13 @@
 {
 	ddf_fun_t *fun_a = NULL;
+	int flags;
+	int retval;
 	int rc;
 
-	int flags = AS_AREA_READ | AS_AREA_WRITE;
-	int retval = physmem_map(res->base,
+	flags = AS_AREA_READ | AS_AREA_WRITE;
+	obio->regs = (volatile uint64_t *)AS_AREA_ANY;
+	retval = physmem_map(res->base,
 	    ALIGN_UP(OBIO_SIZE, PAGE_SIZE) >> PAGE_WIDTH, flags,
-	    (void *) &base_virt);
+	    (void *) &obio->regs);
 
 	if (retval < 0) {
@@ -130,5 +133,5 @@
 	}
 
-	ddf_msg(LVL_NOTE, "OBIO registers with base at 0x%" PRIun, base_phys);
+	ddf_msg(LVL_NOTE, "OBIO registers with base at 0x%" PRIun, res->base);
 
 	fun_a = ddf_fun_create(obio->dev, fun_exposed, "a");
Index: uspace/drv/intctl/obio/obio.h
===================================================================
--- uspace/drv/intctl/obio/obio.h	(revision 48adf0f5acfc6c801de63d3051a4a732c9e3e07c)
+++ uspace/drv/intctl/obio/obio.h	(revision b63b02ec1ec110cc8397bdc301aaba9426cf74c4)
@@ -47,5 +47,5 @@
 /** OBIO */
 typedef struct {
-	ioport32_t *regs;
+	volatile uint64_t *regs;
 	uintptr_t phys_base;
 	ddf_dev_t *dev;
