aboutsummaryrefslogtreecommitdiff
path: root/accel/tcg
diff options
context:
space:
mode:
authorGuenter Roeck <linux@roeck-us.net>2018-11-28 13:56:10 -0800
committerPaolo Bonzini <pbonzini@redhat.com>2019-01-11 13:57:24 +0100
commitc2d6eeda016887f5d11401cd20281a356e226b51 (patch)
tree78301ce2d9d09f3d3257b9a105e0ca74ebb79d72 /accel/tcg
parent88e94fd238aa425c1a19d64afd1b3c83dfeb7dc2 (diff)
downloadqemu-c2d6eeda016887f5d11401cd20281a356e226b51.zip
qemu-c2d6eeda016887f5d11401cd20281a356e226b51.tar.gz
qemu-c2d6eeda016887f5d11401cd20281a356e226b51.tar.bz2
esp-pci: Fix status register write erase control
Per AM53C974 datasheet, definition of "SCSI Bus and Control (SBAC)" register: Bit 24 'STATUS' Write Erase Control This bit controls the Write Erase feature on bits 3:1 and bit 6 of the DMA Status Register ((B)+54h). When this bit is programmed to '1', the state of bits 3:1 are preserved when read. Bits 3:1 are only cleared when a '1' is written to the corresponding bit location. For example, to clear bit 1, the value of '0000_0010b' should be written to the register. When the DMA Status Preserve bit is '0', bits 3:1 are cleared when read. The status register is currently defined to bit 12, not bit 24. Also, its implementation is reversed: The status is auto-cleared if the bit is set to 1, and must be cleared explicitly when the bit is set to 0. This results in spurious interrupts reported by the Linux kernel, and in some cases even results in stalled SCSI operations. Set SBAC_STATUS to bit 24 and reverse the logic to fix the problem. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Message-Id: <1543442171-24863-1-git-send-email-linux@roeck-us.net> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'accel/tcg')
0 files changed, 0 insertions, 0 deletions