Do actual stalls instead of just setting the semaphore

...oops...
diff --git a/src/cmdstream.h b/src/cmdstream.h
index c700611..743f75f 100644
--- a/src/cmdstream.h
+++ b/src/cmdstream.h
@@ -4,6 +4,7 @@
 #include <etnaviv_drmif.h>
 
 #include "cmdstream.xml.h"
+#include "state.xml.h"
 
 static inline void etna_emit_load_state(struct etna_cmd_stream *stream,
         const uint16_t offset, const uint16_t count)
@@ -36,4 +37,13 @@
     });
 }
 
+static inline void etna_stall(struct etna_cmd_stream *stream, uint32_t from, uint32_t to)
+{
+   etna_cmd_stream_reserve(stream, 4);
+   etna_emit_load_state(stream, VIVS_GL_SEMAPHORE_TOKEN >> 2, 1);
+   etna_cmd_stream_emit(stream, VIVS_GL_SEMAPHORE_TOKEN_FROM(from) | VIVS_GL_SEMAPHORE_TOKEN_TO(to));
+   etna_cmd_stream_emit(stream, VIV_FE_STALL_HEADER_OP_STALL);
+   etna_cmd_stream_emit(stream, VIV_FE_STALL_TOKEN_FROM(from) | VIV_FE_STALL_TOKEN_TO(to));
+}
+
 #endif
diff --git a/src/etnaviv_cl_test.c b/src/etnaviv_cl_test.c
index e099fd7..b157b52 100644
--- a/src/etnaviv_cl_test.c
+++ b/src/etnaviv_cl_test.c
@@ -34,7 +34,8 @@
 
     etna_set_state_from_bo(stream, VIVS_VS_UNIFORMS(0), bmp);
 
-    etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, VIVS_GL_SEMAPHORE_TOKEN_FROM(SYNC_RECIPIENT_FE) | VIVS_GL_SEMAPHORE_TOKEN_TO(SYNC_RECIPIENT_PE));
+    etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
+
     etna_set_state(stream, VIVS_VS_INPUT_COUNT, VIVS_VS_INPUT_COUNT_COUNT(1) | VIVS_VS_INPUT_COUNT_UNK8(1));
     etna_set_state(stream, VIVS_VS_TEMP_REGISTER_CONTROL, VIVS_VS_TEMP_REGISTER_CONTROL_NUM_TEMPS(10));
     etna_set_state(stream, VIVS_VS_OUTPUT(0), VIVS_VS_OUTPUT_O0(0) | VIVS_VS_OUTPUT_O1(0) | VIVS_VS_OUTPUT_O2(0) | VIVS_VS_OUTPUT_O3(0));
@@ -159,7 +160,7 @@
     etna_set_state(stream, VIVS_CL_THREAD_ALLOCATION, 0x1);
     etna_set_state(stream, VIVS_CL_KICKER, 0xbadabeeb);
     etna_set_state(stream, VIVS_GL_FLUSH_CACHE, VIVS_GL_FLUSH_CACHE_TEXTURE | VIVS_GL_FLUSH_CACHE_SHADER_L1);
-    etna_set_state(stream, VIVS_GL_SEMAPHORE_TOKEN, VIVS_GL_SEMAPHORE_TOKEN_FROM(SYNC_RECIPIENT_FE) | VIVS_GL_SEMAPHORE_TOKEN_TO(SYNC_RECIPIENT_PE));
+    etna_stall(stream, SYNC_RECIPIENT_FE, SYNC_RECIPIENT_PE);
     etna_set_state(stream, VIVS_GL_FLUSH_CACHE, VIVS_GL_FLUSH_CACHE_DEPTH | VIVS_GL_FLUSH_CACHE_COLOR);
 }