mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-29 13:23:54 -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);
|
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 {
|
typedef struct ADMADescr {
|
||||||
hwaddr addr;
|
hwaddr addr;
|
||||||
uint16_t length;
|
uint16_t length;
|
||||||
|
@ -930,12 +939,7 @@ static void sdhci_data_transfer(void *opaque)
|
||||||
if (s->trnmod & SDHC_TRNS_DMA) {
|
if (s->trnmod & SDHC_TRNS_DMA) {
|
||||||
switch (SDHC_DMA_TYPE(s->hostctl1)) {
|
switch (SDHC_DMA_TYPE(s->hostctl1)) {
|
||||||
case SDHC_CTRL_SDMA:
|
case SDHC_CTRL_SDMA:
|
||||||
if ((s->blkcnt == 1) || !(s->trnmod & SDHC_TRNS_MULTI)) {
|
sdhci_sdma_transfer(s);
|
||||||
sdhci_sdma_transfer_single_block(s);
|
|
||||||
} else {
|
|
||||||
sdhci_sdma_transfer_multi_blocks(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case SDHC_CTRL_ADMA1_32:
|
case SDHC_CTRL_ADMA1_32:
|
||||||
if (!(s->capareg & R_SDHC_CAPAB_ADMA1_MASK)) {
|
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 &&
|
if (!(mask & 0xFF000000) && s->blkcnt &&
|
||||||
(s->blksize & BLOCK_SIZE_MASK) &&
|
(s->blksize & BLOCK_SIZE_MASK) &&
|
||||||
SDHC_DMA_TYPE(s->hostctl1) == SDHC_CTRL_SDMA) {
|
SDHC_DMA_TYPE(s->hostctl1) == SDHC_CTRL_SDMA) {
|
||||||
if (s->trnmod & SDHC_TRNS_MULTI) {
|
sdhci_sdma_transfer(s);
|
||||||
sdhci_sdma_transfer_multi_blocks(s);
|
|
||||||
} else {
|
|
||||||
sdhci_sdma_transfer_single_block(s);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue