Index: uspace/drv/char/pl050/pl050.c
===================================================================
--- uspace/drv/char/pl050/pl050.c	(revision c8ea6eca1c41df9b67e9c83a3b830bb036e10da8)
+++ uspace/drv/char/pl050/pl050.c	(revision af7b85bb59db696cbde621017721740cf7612ff6)
@@ -59,5 +59,6 @@
 static errno_t pl050_fun_offline(ddf_fun_t *);
 static void pl050_char_conn(ipc_call_t *, void *);
-static errno_t pl050_read(chardev_srv_t *, void *, size_t, size_t *);
+static errno_t pl050_read(chardev_srv_t *, void *, size_t, size_t *,
+    chardev_flags_t);
 static errno_t pl050_write(chardev_srv_t *, const void *, size_t, size_t *);
 
@@ -242,5 +243,5 @@
 
 static errno_t pl050_read(chardev_srv_t *srv, void *buffer, size_t size,
-    size_t *nread)
+    size_t *nread, chardev_flags_t flags)
 {
 	pl050_t *pl050 = (pl050_t *)srv->srvs->sarg;
@@ -252,5 +253,6 @@
 	left = size;
 	while (left > 0) {
-		while (left == size && pl050->buf_rp == pl050->buf_wp)
+		while ((flags & chardev_f_nonblock) == 0 &&
+		    left == size && pl050->buf_rp == pl050->buf_wp)
 			fibril_condvar_wait(&pl050->buf_cv, &pl050->buf_lock);
 		if (pl050->buf_rp == pl050->buf_wp)
