diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index b31c6c3..105e33e 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -245,9 +245,6 @@
  */
 #define MCODE_BUFF_PER_REQ	256
 
-/* If the _pl330_req is available to the client */
-#define IS_FREE(req)	(*((u8 *)((req)->mc_cpu)) == CMD_DMAEND)
-
 /* Use this _only_ to wait on transient states */
 #define UNTIL(t, s)	while (!(_state(t) & (s))) cpu_relax();
 
@@ -529,14 +526,12 @@
 
 static inline bool _queue_empty(struct pl330_thread *thrd)
 {
-	return (IS_FREE(&thrd->req[0]) && IS_FREE(&thrd->req[1]))
-		? true : false;
+	return thrd->req[0].desc == NULL && thrd->req[1].desc == NULL;
 }
 
 static inline bool _queue_full(struct pl330_thread *thrd)
 {
-	return (IS_FREE(&thrd->req[0]) || IS_FREE(&thrd->req[1]))
-		? false : true;
+	return thrd->req[0].desc != NULL && thrd->req[1].desc != NULL;
 }
 
 static inline bool is_manager(struct pl330_thread *thrd)
@@ -948,21 +943,6 @@
 	writel(0, regs + DBGCMD);
 }
 
-/*
- * Mark a _pl330_req as free.
- * We do it by writing DMAEND as the first instruction
- * because no valid request is going to have DMAEND as
- * its first instruction to execute.
- */
-static void mark_free(struct pl330_thread *thrd, int idx)
-{
-	struct _pl330_req *req = &thrd->req[idx];
-
-	_emit_END(0, req->mc_cpu);
-
-	thrd->req_running = -1;
-}
-
 static inline u32 _state(struct pl330_thread *thrd)
 {
 	void __iomem *regs = thrd->dmac->base;
@@ -1059,18 +1039,18 @@
 		return true;
 
 	idx = 1 - thrd->lstenq;
-	if (!IS_FREE(&thrd->req[idx]))
+	if (thrd->req[idx].desc != NULL) {
 		req = &thrd->req[idx];
-	else {
+	} else {
 		idx = thrd->lstenq;
-		if (!IS_FREE(&thrd->req[idx]))
+		if (thrd->req[idx].desc != NULL)
 			req = &thrd->req[idx];
 		else
 			req = NULL;
 	}
 
 	/* Return if no request */
-	if (!req || !req->desc)
+	if (!req)
 		return true;
 
 	desc = req->desc;
@@ -1438,7 +1418,7 @@
 
 	ccr = _prepare_ccr(&desc->rqcfg);
 
-	idx = IS_FREE(&thrd->req[0]) ? 0 : 1;
+	idx = thrd->req[0].desc == NULL ? 0 : 1;
 
 	xs.ccr = ccr;
 	xs.desc = desc;
@@ -1532,8 +1512,7 @@
 
 			thrd->req[0].desc = NULL;
 			thrd->req[1].desc = NULL;
-			mark_free(thrd, 0);
-			mark_free(thrd, 1);
+			thrd->req_running = -1;
 
 			/* Clear the reset flag */
 			pl330->dmac_tbd.reset_chan &= ~(1 << i);
@@ -1615,8 +1594,6 @@
 			descdone = thrd->req[active].desc;
 			thrd->req[active].desc = NULL;
 
-			mark_free(thrd, active);
-
 			/* Get going again ASAP */
 			_start(thrd);
 
@@ -1667,8 +1644,7 @@
 
 		thrd->req[0].desc = NULL;
 		thrd->req[1].desc = NULL;
-		mark_free(thrd, 0);
-		mark_free(thrd, 1);
+		thrd->req_running = -1;
 		break;
 
 	case PL330_OP_ABORT:
@@ -1680,7 +1656,7 @@
 			break;
 
 		thrd->req[active].desc = NULL;
-		mark_free(thrd, active);
+		thrd->req_running = -1;
 
 		/* Start the next */
 	case PL330_OP_START:
@@ -1741,9 +1717,8 @@
 				thrd->free = false;
 				thrd->lstenq = 1;
 				thrd->req[0].desc = NULL;
-				mark_free(thrd, 0);
 				thrd->req[1].desc = NULL;
-				mark_free(thrd, 1);
+				thrd->req_running = -1;
 				break;
 			}
 		}
@@ -1841,14 +1816,14 @@
 	thrd->req[0].mc_bus = pl330->mcode_bus
 				+ (thrd->id * pl330->mcbufsz);
 	thrd->req[0].desc = NULL;
-	mark_free(thrd, 0);
 
 	thrd->req[1].mc_cpu = thrd->req[0].mc_cpu
 				+ pl330->mcbufsz / 2;
 	thrd->req[1].mc_bus = thrd->req[0].mc_bus
 				+ pl330->mcbufsz / 2;
 	thrd->req[1].desc = NULL;
-	mark_free(thrd, 1);
+
+	thrd->req_running = -1;
 }
 
 static int dmac_alloc_threads(struct pl330_dmac *pl330)
