diff --git a/include/sm_io.h b/include/sm_io.h
index 96ff84c97d87331d4ad075a5aa08f4ea2ef52e71..1ec7a574e4b28951d4ee4b7d937e9233d741f7d1 100644
--- a/include/sm_io.h
+++ b/include/sm_io.h
@@ -124,6 +124,9 @@ smio_t *smio_new (th_boot_args_t *args, zsock_t *pipe_mgmt, zsock_t *pipe_msg,
 smio_err_e smio_destroy (smio_t **self_p);
 /* Loop through all interface sockets */
 smio_err_e smio_loop (smio_t *self);
+/* Register SMIO */
+smio_err_e smio_register_sm (smio_t *self, uint32_t smio_id, uint64_t base,
+        uint32_t inst_id);
 
 smio_err_e smio_init_exp_ops (smio_t *self, disp_op_t** smio_exp_ops,
         const disp_table_func_fp *func_fps);
diff --git a/src/sm_io/sm_io.c b/src/sm_io/sm_io.c
index 32a986a13fd9bd8eff7c1d676285e140c633c04b..568d80f78591d1a525c9289423b385701eef387b 100644
--- a/src/sm_io/sm_io.c
+++ b/src/sm_io/sm_io.c
@@ -364,6 +364,20 @@ smio_err_e smio_loop (smio_t *self)
     return err;
 }
 
+smio_err_e smio_register_sm (smio_t *self, uint32_t smio_id, uint64_t base,
+        uint32_t inst_id)
+{
+    assert (self);
+    smio_err_e err = SMIO_SUCCESS;
+
+    devio_err_e derr = devio_register_sm (self->parent, smio_id, base, inst_id);
+    ASSERT_TEST(derr == DEVIO_SUCCESS, "Could not register SM", err_register_sm,
+           SMIO_ERR_REGISTER_SM);
+
+err_register_sm:
+    return err;
+}
+
 /************************************************************/
 /***************** Dispatch table callbacks *****************/
 /************************************************************/