Index: uspace/drv/time/cmos-rtc/cmos-rtc.c
===================================================================
--- uspace/drv/time/cmos-rtc/cmos-rtc.c	(revision 010341d9c208335a905bf60450a07ab9ca72771d)
+++ uspace/drv/time/cmos-rtc/cmos-rtc.c	(revision f30ee57112a3840aa8a33e5b5d2081d15ac92f59)
@@ -38,4 +38,5 @@
 #include <errno.h>
 #include <ddi.h>
+#include <libarch/ddi.h>
 #include <stdio.h>
 #include <ddf/driver.h>
@@ -45,4 +46,6 @@
 #include <device/hw_res.h>
 #include <devman.h>
+
+#include "cmos-regs.h"
 
 #define NAME "cmos-rtc"
@@ -76,4 +79,5 @@
 static int  rtc_open(ddf_fun_t *fun);
 static void rtc_close(ddf_fun_t *fun);
+static bool rtc_update_in_progress(rtc_t *rtc);
 
 
@@ -218,4 +222,17 @@
 }
 
+/** Check if an update is in progress
+ *
+ * @param rtc  The rtc device
+ *
+ * @return  true if an update is in progress, false otherwise
+ */
+static bool
+rtc_update_in_progress(rtc_t *rtc)
+{
+	pio_write_8(rtc->port, RTC_UPDATE);
+	return pio_read_8(rtc->port + 1) & RTC_MASK_UPDATE;
+}
+
 /** Read the current time from the CMOS
  *
@@ -228,4 +245,11 @@
 rtc_time_get(ddf_fun_t *fun, struct tm *t)
 {
+	rtc_t *rtc = RTC_FROM_FNODE(fun);
+
+	fibril_mutex_lock(&rtc->mutex);
+
+	while (rtc_update_in_progress(rtc));
+
+	fibril_mutex_unlock(&rtc->mutex);
 	return EOK;
 }
