mirror of
https://github.com/qemu/qemu.git
synced 2024-12-15 23:43:31 +08:00
hw/dma/xlnx_csu_dma: don't throw guest errors when stopping the SRC DMA
UG1087 states for the source channel that: if SIZE is programmed to 0, and the DMA is started, the interrupts DONE and MEM_DONE will be asserted. This implies that it is allowed for the guest to stop the source DMA by writing a size of 0 to the SIZE register, so remove the LOG_GUEST_ERROR in that case. While at it remove the comment marking the SIZE register as write-only. See: https://docs.xilinx.com/r/en-US/ug1087-zynq-ultrascale-registers/CSUDMA_SRC_SIZE-CSUDMA-Register Signed-off-by: Frederic Konrad <fkonrad@amd.com> Reviewed-by: Francisco Iglesias <francisco.iglesias@amd.com> Message-id: 20231124143505.1493184-4-fkonrad@amd.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
a9bc470ec2
commit
1ee80592bf
@ -39,7 +39,7 @@
|
||||
REG32(ADDR, 0x0)
|
||||
FIELD(ADDR, ADDR, 2, 30) /* wo */
|
||||
REG32(SIZE, 0x4)
|
||||
FIELD(SIZE, SIZE, 2, 27) /* wo */
|
||||
FIELD(SIZE, SIZE, 2, 27)
|
||||
FIELD(SIZE, LAST_WORD, 0, 1) /* rw, only exists in SRC */
|
||||
REG32(STATUS, 0x8)
|
||||
FIELD(STATUS, DONE_CNT, 13, 3) /* wtc */
|
||||
@ -335,10 +335,14 @@ static uint64_t addr_pre_write(RegisterInfo *reg, uint64_t val)
|
||||
static uint64_t size_pre_write(RegisterInfo *reg, uint64_t val)
|
||||
{
|
||||
XlnxCSUDMA *s = XLNX_CSU_DMA(reg->opaque);
|
||||
uint64_t size = val & R_SIZE_SIZE_MASK;
|
||||
|
||||
if (s->regs[R_SIZE] != 0) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"%s: Starting DMA while already running.\n", __func__);
|
||||
if (size || s->is_dst) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"%s: Starting DMA while already running.\n",
|
||||
__func__);
|
||||
}
|
||||
}
|
||||
|
||||
if (!s->is_dst) {
|
||||
@ -346,7 +350,7 @@ static uint64_t size_pre_write(RegisterInfo *reg, uint64_t val)
|
||||
}
|
||||
|
||||
/* Size is word aligned */
|
||||
return val & R_SIZE_SIZE_MASK;
|
||||
return size;
|
||||
}
|
||||
|
||||
static uint64_t size_post_read(RegisterInfo *reg, uint64_t val)
|
||||
|
Loading…
Reference in New Issue
Block a user