PPC: dbdma: Allow new commands in RUN state
authorAlexander Graf <agraf@suse.de>
Sat, 29 Jun 2013 23:53:51 +0000 (01:53 +0200)
committerAlexander Graf <agraf@suse.de>
Thu, 11 Jul 2013 16:51:24 +0000 (18:51 +0200)
The DBDMA controller can not change its command stream while it's
actively streaming data, true. But the fact that it's in RUN state
doesn't actually indicate anything. It could just as well be in
WAIT while in RUN. And then it's legal to change commands.

This fixes a real world issue I've encountered with Mac OS X.

Signed-off-by: Alexander Graf <agraf@suse.de>
hw/misc/macio/mac_dbdma.c

index 3b1e97efbe23dea89a14c8f37632b3beed96e208..76567672b0476b9e1b0f0d3d4dabcfbd92807fba 100644 (file)
@@ -725,11 +725,11 @@ static void dbdma_write(void *opaque, hwaddr addr,
     DBDMA_DPRINTF("channel 0x%x reg 0x%x\n",
                   (uint32_t)addr >> DBDMA_CHANNEL_SHIFT, reg);
 
-    /* cmdptr cannot be modified if channel is RUN or ACTIVE */
+    /* cmdptr cannot be modified if channel is ACTIVE */
 
-    if (reg == DBDMA_CMDPTR_LO &&
-        (ch->regs[DBDMA_STATUS] & (RUN | ACTIVE)))
+    if (reg == DBDMA_CMDPTR_LO && (ch->regs[DBDMA_STATUS] & ACTIVE)) {
         return;
+    }
 
     ch->regs[reg] = value;