mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00
hw/sd/sdhci: Factor sdhci_sdma_transfer() out
Factor sdhci_sdma_transfer() out of sdhci_data_transfer(). Re-use it in sdhci_write(), so we don't try to run multi block transfer for a single block. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Bernhard Beschow <shentey@gmail.com> Message-Id: <20250109122029.22780-1-philmd@linaro.org>
This commit is contained in:
parent
5df50b8e97
commit
14b1086f92
1 changed files with 11 additions and 11 deletions
|
@ -699,6 +699,15 @@ static void sdhci_sdma_transfer_single_block(SDHCIState *s)
|
|||
sdhci_end_transfer(s);
|
||||
}
|
||||
|
||||
static void sdhci_sdma_transfer(SDHCIState *s)
|
||||
{
|
||||
if ((s->blkcnt == 1) || !(s->trnmod & SDHC_TRNS_MULTI)) {
|
||||
sdhci_sdma_transfer_single_block(s);
|
||||
} else {
|
||||
sdhci_sdma_transfer_multi_blocks(s);
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct ADMADescr {
|
||||
hwaddr addr;
|
||||
uint16_t length;
|
||||
|
@ -930,12 +939,7 @@ static void sdhci_data_transfer(void *opaque)
|
|||
if (s->trnmod & SDHC_TRNS_DMA) {
|
||||
switch (SDHC_DMA_TYPE(s->hostctl1)) {
|
||||
case SDHC_CTRL_SDMA:
|
||||
if ((s->blkcnt == 1) || !(s->trnmod & SDHC_TRNS_MULTI)) {
|
||||
sdhci_sdma_transfer_single_block(s);
|
||||
} else {
|
||||
sdhci_sdma_transfer_multi_blocks(s);
|
||||
}
|
||||
|
||||
sdhci_sdma_transfer(s);
|
||||
break;
|
||||
case SDHC_CTRL_ADMA1_32:
|
||||
if (!(s->capareg & R_SDHC_CAPAB_ADMA1_MASK)) {
|
||||
|
@ -1179,11 +1183,7 @@ sdhci_write(void *opaque, hwaddr offset, uint64_t val, unsigned size)
|
|||
if (!(mask & 0xFF000000) && s->blkcnt &&
|
||||
(s->blksize & BLOCK_SIZE_MASK) &&
|
||||
SDHC_DMA_TYPE(s->hostctl1) == SDHC_CTRL_SDMA) {
|
||||
if (s->trnmod & SDHC_TRNS_MULTI) {
|
||||
sdhci_sdma_transfer_multi_blocks(s);
|
||||
} else {
|
||||
sdhci_sdma_transfer_single_block(s);
|
||||
}
|
||||
sdhci_sdma_transfer(s);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue