[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 07/13] hw/sd/sdhci: Yield if interrupt delivered during multiple t
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 07/13] hw/sd/sdhci: Yield if interrupt delivered during multiple transfer |
Date: |
Wed, 21 Oct 2020 19:34:44 +0200 |
The Descriptor Table has a bit to allow the DMA to generates
Interrupt when the operation of the descriptor line is completed
(see "1.13.4. Descriptor Table" of 'SD Host Controller Simplified
Specification Version 2.00').
If we have pending interrupt and the descriptor requires it
to be generated as soon as it is completed, reschedule pending
transfers and yield to the CPU.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <20200903172806.489710-5-f4bug@amsat.org>
---
hw/sd/sdhci.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index b93ecefd20c..2f8b74a84f7 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -837,7 +837,10 @@ static void sdhci_do_adma(SDHCIState *s)
s->norintsts |= SDHC_NIS_DMA;
}
- sdhci_update_irq(s);
+ if (sdhci_update_irq(s) && !(dscr.attr & SDHC_ADMA_ATTR_END)) {
+ /* IRQ delivered, reschedule current transfer */
+ break;
+ }
}
/* ADMA transfer terminates if blkcnt == 0 or by END attribute */
--
2.26.2
- [PULL 00/13] SD/MMC patches for 2020-10-21, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 01/13] hw/sd/sdhci: Fix qemu_log_mask() format string, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 02/13] hw/sd/sdhci: Document the datasheet used, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 03/13] hw/sd/sdhci: Fix DMA Transfer Block Size field, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 04/13] hw/sd/sdhci: Stop multiple transfers when block count is cleared, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 05/13] hw/sd/sdhci: Resume pending DMA transfers on MMIO accesses, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 06/13] hw/sd/sdhci: Let sdhci_update_irq() return if IRQ was delivered, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 07/13] hw/sd/sdhci: Yield if interrupt delivered during multiple transfer,
Philippe Mathieu-Daudé <=
- [PULL 08/13] hw/sd/sdcard: Add trace event for ERASE command (CMD38), Philippe Mathieu-Daudé, 2020/10/21
- [PULL 09/13] hw/sd/sdcard: Introduce the INVALID_ADDRESS definition, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 10/13] hw/sd/sdcard: Do not use legal address '0' for INVALID_ADDRESS, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 11/13] hw/sd/sdcard: Reset both start/end addresses on error, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 12/13] hw/sd/sdcard: Do not attempt to erase out of range addresses, Philippe Mathieu-Daudé, 2020/10/21
- [PULL 13/13] hw/sd/sdcard: Assert if accessing an illegal group, Philippe Mathieu-Daudé, 2020/10/21
- Re: [PULL 00/13] SD/MMC patches for 2020-10-21, Peter Maydell, 2020/10/22