mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
hw/dma/pl080: Correct bug in register address decode logic
A bug in the handling of the register address decode logic for the PL08x meant that we were incorrectly treating accesses to the DMA channel registers (DMACCxSrcAddr, DMACCxDestaddr, DMACCxLLI, DMACCxControl, DMACCxConfiguration) as bad offsets. Fix this long-standing bug. Fixes: https://bugs.launchpad.net/qemu/+bug/1637974 Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
This commit is contained in:
parent
c193304d4f
commit
156448ab64
1 changed files with 3 additions and 2 deletions
|
@ -229,7 +229,7 @@ static uint64_t pl080_read(void *opaque, hwaddr offset,
|
|||
i = (offset & 0xe0) >> 5;
|
||||
if (i >= s->nchannels)
|
||||
goto bad_offset;
|
||||
switch (offset >> 2) {
|
||||
switch ((offset >> 2) & 7) {
|
||||
case 0: /* SrcAddr */
|
||||
return s->chan[i].src;
|
||||
case 1: /* DestAddr */
|
||||
|
@ -290,7 +290,7 @@ static void pl080_write(void *opaque, hwaddr offset,
|
|||
i = (offset & 0xe0) >> 5;
|
||||
if (i >= s->nchannels)
|
||||
goto bad_offset;
|
||||
switch (offset >> 2) {
|
||||
switch ((offset >> 2) & 7) {
|
||||
case 0: /* SrcAddr */
|
||||
s->chan[i].src = value;
|
||||
break;
|
||||
|
@ -308,6 +308,7 @@ static void pl080_write(void *opaque, hwaddr offset,
|
|||
pl080_run(s);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
switch (offset >> 2) {
|
||||
case 2: /* IntTCClear */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue