esp.c: only call dma_memory_write function if transfer length is non-zero
In the cases where mixed DMA/non-DMA transfers are used or no data is available, it is possible for the calculated transfer length to be zero. Only call the dma_memory_write function where the transfer length is non-zero to avoid invoking the DMA engine for a zero length transfer which can have side-effects (along with generating additional tracing noise). Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20250711204636.542964-6-mark.cave-ayland@ilande.co.uk> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
9d6df740ec
commit
28a579a349
1 changed files with 5 additions and 1 deletions
|
|
@ -631,7 +631,9 @@ static void esp_do_dma(ESPState *s)
|
|||
switch (s->rregs[ESP_CMD]) {
|
||||
case CMD_TI | CMD_DMA:
|
||||
if (s->dma_memory_write) {
|
||||
s->dma_memory_write(s->dma_opaque, s->async_buf, len);
|
||||
if (len) {
|
||||
s->dma_memory_write(s->dma_opaque, s->async_buf, len);
|
||||
}
|
||||
} else {
|
||||
/* Copy device data to FIFO */
|
||||
len = MIN(len, fifo8_num_free(&s->fifo));
|
||||
|
|
@ -681,6 +683,7 @@ static void esp_do_dma(ESPState *s)
|
|||
buf[0] = s->status;
|
||||
|
||||
if (s->dma_memory_write) {
|
||||
/* Length already non-zero */
|
||||
s->dma_memory_write(s->dma_opaque, buf, len);
|
||||
} else {
|
||||
esp_fifo_push_buf(s, buf, len);
|
||||
|
|
@ -715,6 +718,7 @@ static void esp_do_dma(ESPState *s)
|
|||
buf[0] = 0;
|
||||
|
||||
if (s->dma_memory_write) {
|
||||
/* Length already non-zero */
|
||||
s->dma_memory_write(s->dma_opaque, buf, len);
|
||||
} else {
|
||||
esp_fifo_push_buf(s, buf, len);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue