mirror of https://github.com/xqemu/xqemu.git
sdhci: use a numeric value for the default CAPAB register
using many #defines is not portable when scaling to different HCI. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Alistair Francis <alistair.francis@xilinx.com> Message-Id: <20180208164818.7961-9-f4bug@amsat.org>
This commit is contained in:
parent
aceb5b064c
commit
aa164fbff3
|
@ -38,67 +38,25 @@
|
||||||
#define TYPE_SDHCI_BUS "sdhci-bus"
|
#define TYPE_SDHCI_BUS "sdhci-bus"
|
||||||
#define SDHCI_BUS(obj) OBJECT_CHECK(SDBus, (obj), TYPE_SDHCI_BUS)
|
#define SDHCI_BUS(obj) OBJECT_CHECK(SDBus, (obj), TYPE_SDHCI_BUS)
|
||||||
|
|
||||||
|
#define MASKED_WRITE(reg, mask, val) (reg = (reg & (mask)) | (val))
|
||||||
|
|
||||||
/* Default SD/MMC host controller features information, which will be
|
/* Default SD/MMC host controller features information, which will be
|
||||||
* presented in CAPABILITIES register of generic SD host controller at reset.
|
* presented in CAPABILITIES register of generic SD host controller at reset.
|
||||||
* If not stated otherwise:
|
*
|
||||||
* 0 - not supported, 1 - supported, other - prohibited.
|
* support:
|
||||||
|
* - 3.3v and 1.8v voltages
|
||||||
|
* - SDMA/ADMA1/ADMA2
|
||||||
|
* - high-speed
|
||||||
|
* max host controller R/W buffers size: 512B
|
||||||
|
* max clock frequency for SDclock: 52 MHz
|
||||||
|
* timeout clock frequency: 52 MHz
|
||||||
|
*
|
||||||
|
* does not support:
|
||||||
|
* - 3.0v voltage
|
||||||
|
* - 64-bit system bus
|
||||||
|
* - suspend/resume
|
||||||
*/
|
*/
|
||||||
#define SDHC_CAPAB_64BITBUS 0ul /* 64-bit System Bus Support */
|
#define SDHC_CAPAB_REG_DEFAULT 0x057834b4
|
||||||
#define SDHC_CAPAB_18V 1ul /* Voltage support 1.8v */
|
|
||||||
#define SDHC_CAPAB_30V 0ul /* Voltage support 3.0v */
|
|
||||||
#define SDHC_CAPAB_33V 1ul /* Voltage support 3.3v */
|
|
||||||
#define SDHC_CAPAB_SUSPRESUME 0ul /* Suspend/resume support */
|
|
||||||
#define SDHC_CAPAB_SDMA 1ul /* SDMA support */
|
|
||||||
#define SDHC_CAPAB_HIGHSPEED 1ul /* High speed support */
|
|
||||||
#define SDHC_CAPAB_ADMA1 1ul /* ADMA1 support */
|
|
||||||
#define SDHC_CAPAB_ADMA2 1ul /* ADMA2 support */
|
|
||||||
/* Maximum host controller R/W buffers size
|
|
||||||
* Possible values: 512, 1024, 2048 bytes */
|
|
||||||
#define SDHC_CAPAB_MAXBLOCKLENGTH 512ul
|
|
||||||
/* Maximum clock frequency for SDclock in MHz
|
|
||||||
* value in range 10-63 MHz, 0 - not defined */
|
|
||||||
#define SDHC_CAPAB_BASECLKFREQ 52ul
|
|
||||||
#define SDHC_CAPAB_TOUNIT 1ul /* Timeout clock unit 0 - kHz, 1 - MHz */
|
|
||||||
/* Timeout clock frequency 1-63, 0 - not defined */
|
|
||||||
#define SDHC_CAPAB_TOCLKFREQ 52ul
|
|
||||||
|
|
||||||
/* Now check all parameters and calculate CAPABILITIES REGISTER value */
|
|
||||||
#if SDHC_CAPAB_64BITBUS > 1 || SDHC_CAPAB_18V > 1 || SDHC_CAPAB_30V > 1 || \
|
|
||||||
SDHC_CAPAB_33V > 1 || SDHC_CAPAB_SUSPRESUME > 1 || SDHC_CAPAB_SDMA > 1 || \
|
|
||||||
SDHC_CAPAB_HIGHSPEED > 1 || SDHC_CAPAB_ADMA2 > 1 || SDHC_CAPAB_ADMA1 > 1 ||\
|
|
||||||
SDHC_CAPAB_TOUNIT > 1
|
|
||||||
#error Capabilities features can have value 0 or 1 only!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if SDHC_CAPAB_MAXBLOCKLENGTH == 512
|
|
||||||
#define MAX_BLOCK_LENGTH 0ul
|
|
||||||
#elif SDHC_CAPAB_MAXBLOCKLENGTH == 1024
|
|
||||||
#define MAX_BLOCK_LENGTH 1ul
|
|
||||||
#elif SDHC_CAPAB_MAXBLOCKLENGTH == 2048
|
|
||||||
#define MAX_BLOCK_LENGTH 2ul
|
|
||||||
#else
|
|
||||||
#error Max host controller block size can have value 512, 1024 or 2048 only!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (SDHC_CAPAB_BASECLKFREQ > 0 && SDHC_CAPAB_BASECLKFREQ < 10) || \
|
|
||||||
SDHC_CAPAB_BASECLKFREQ > 63
|
|
||||||
#error SDclock frequency can have value in range 0, 10-63 only!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if SDHC_CAPAB_TOCLKFREQ > 63
|
|
||||||
#error Timeout clock frequency can have value in range 0-63 only!
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SDHC_CAPAB_REG_DEFAULT \
|
|
||||||
((SDHC_CAPAB_64BITBUS << 28) | (SDHC_CAPAB_18V << 26) | \
|
|
||||||
(SDHC_CAPAB_30V << 25) | (SDHC_CAPAB_33V << 24) | \
|
|
||||||
(SDHC_CAPAB_SUSPRESUME << 23) | (SDHC_CAPAB_SDMA << 22) | \
|
|
||||||
(SDHC_CAPAB_HIGHSPEED << 21) | (SDHC_CAPAB_ADMA1 << 20) | \
|
|
||||||
(SDHC_CAPAB_ADMA2 << 19) | (MAX_BLOCK_LENGTH << 16) | \
|
|
||||||
(SDHC_CAPAB_BASECLKFREQ << 8) | (SDHC_CAPAB_TOUNIT << 7) | \
|
|
||||||
(SDHC_CAPAB_TOCLKFREQ))
|
|
||||||
|
|
||||||
#define MASKED_WRITE(reg, mask, val) (reg = (reg & (mask)) | (val))
|
|
||||||
|
|
||||||
static uint8_t sdhci_slotint(SDHCIState *s)
|
static uint8_t sdhci_slotint(SDHCIState *s)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue