PPC: dbdma: Allow new commands in RUN state
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>
This commit is contained in:
parent
58c0c31183
commit
7eaba824b6
@ -725,11 +725,11 @@ static void dbdma_write(void *opaque, hwaddr addr,
|
|||||||
DBDMA_DPRINTF("channel 0x%x reg 0x%x\n",
|
DBDMA_DPRINTF("channel 0x%x reg 0x%x\n",
|
||||||
(uint32_t)addr >> DBDMA_CHANNEL_SHIFT, reg);
|
(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 &&
|
if (reg == DBDMA_CMDPTR_LO && (ch->regs[DBDMA_STATUS] & ACTIVE)) {
|
||||||
(ch->regs[DBDMA_STATUS] & (RUN | ACTIVE)))
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ch->regs[reg] = value;
|
ch->regs[reg] = value;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user