[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v7 11/14] sdhci: implement the Host Control 2 regist
From: |
Philippe Mathieu-Daudé |
Subject: |
[Qemu-devel] [PATCH v7 11/14] sdhci: implement the Host Control 2 register for the tunning sequence |
Date: |
Thu, 18 Jan 2018 17:40:55 -0300 |
[based on a patch from Alistair Francis <address@hidden>
from qemu/xilinx tag xilinx-v2015.2]
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
---
include/hw/sd/sdhci.h | 1 +
hw/sd/sdhci.c | 22 +++++++++++++++++++---
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/include/hw/sd/sdhci.h b/include/hw/sd/sdhci.h
index 98edcc1048..9d3f656441 100644
--- a/include/hw/sd/sdhci.h
+++ b/include/hw/sd/sdhci.h
@@ -71,6 +71,7 @@ typedef struct SDHCIState {
uint16_t norintsigen; /* Normal Interrupt Signal Enable Register */
uint16_t errintsigen; /* Error Interrupt Signal Enable Register */
uint16_t acmd12errsts; /* Auto CMD12 error status register */
+ uint16_t hostctl2; /* Host Control 2 */
uint64_t admasysaddr; /* ADMA System Address Register */
/* Read-only registers */
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index 651f523089..37b3b265ef 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -315,14 +315,29 @@ static void sdhci_end_transfer(SDHCIState *s)
static void sdhci_read_block_from_card(SDHCIState *s)
{
int index = 0;
+ uint8_t data;
+ const uint16_t blk_size = s->blksize & BLOCK_SIZE_MASK;
if ((s->trnmod & SDHC_TRNS_MULTI) &&
(s->trnmod & SDHC_TRNS_BLK_CNT_EN) && (s->blkcnt == 0)) {
return;
}
- for (index = 0; index < (s->blksize & BLOCK_SIZE_MASK); index++) {
- s->fifo_buffer[index] = sdbus_read_data(&s->sdbus);
+ for (index = 0; index < blk_size; index++) {
+ data = sdbus_read_data(&s->sdbus);
+ if (!FIELD_EX32(s->hostctl2, SDHC_HOSTCTL2, EXECUTE_TUNING)) {
+ /* Device is not in tunning */
+ s->fifo_buffer[index] = data;
+ }
+ }
+
+ if (FIELD_EX32(s->hostctl2, SDHC_HOSTCTL2, EXECUTE_TUNING)) {
+ /* Device is in tunning */
+ s->hostctl2 &= ~R_SDHC_HOSTCTL2_EXECUTE_TUNING_MASK;
+ s->hostctl2 |= R_SDHC_HOSTCTL2_SAMPLING_CLKSEL_MASK;
+ s->prnsts &= ~(SDHC_DAT_LINE_ACTIVE | SDHC_DOING_READ |
+ SDHC_DATA_INHIBIT);
+ goto read_done;
}
/* New data now available for READ through Buffer Port Register */
@@ -347,6 +362,7 @@ static void sdhci_read_block_from_card(SDHCIState *s)
}
}
+read_done:
sdhci_update_irq(s);
}
@@ -912,7 +928,7 @@ static uint64_t sdhci_read(void *opaque, hwaddr offset,
unsigned size)
ret = s->norintsigen | (s->errintsigen << 16);
break;
case SDHC_ACMD12ERRSTS:
- ret = s->acmd12errsts;
+ ret = s->acmd12errsts | (s->hostctl2 << 16);
break;
case SDHC_CAPAB:
ret = (uint32_t)s->capareg;
--
2.15.1
- [Qemu-devel] [PATCH v7 01/14] sdhci: add v3 capabilities, (continued)
- [Qemu-devel] [PATCH v7 01/14] sdhci: add v3 capabilities, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 02/14] sdhci: rename the hostctl1 register, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 03/14] hw/arm/bcm2835_peripherals: implement SDHCI Spec v3, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 04/14] hw/arm/bcm2835_peripherals: change maximum block size to 1kB, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 05/14] hw/arm/fsl-imx6: implement SDHCI Spec v3, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 06/14] hw/arm/xilinx_zynqmp: implement SDHCI Spec v3, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 07/14] sdhci: check Spec v3 capabilities qtest, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 08/14] sdhci: add a check_capab_v3() qtest, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 09/14] sdhci: remove the deprecated 'capareg' property, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 10/14] sdhci: add Spec v4.2 register definitions, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 11/14] sdhci: implement the Host Control 2 register for the tunning sequence,
Philippe Mathieu-Daudé <=
- [Qemu-devel] [PATCH v7 12/14] sdbus: add trace events, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 13/14] sdhci: implement UHS-I voltage switch, Philippe Mathieu-Daudé, 2018/01/18
- [Qemu-devel] [PATCH v7 14/14] sdhci: implement CMD/DAT[] fields in the Present State register, Philippe Mathieu-Daudé, 2018/01/18