diff options
Diffstat (limited to 'drivers/mci/imx-esdhc.h')
-rw-r--r-- | drivers/mci/imx-esdhc.h | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/drivers/mci/imx-esdhc.h b/drivers/mci/imx-esdhc.h index f1685eac06..eff556f2ff 100644 --- a/drivers/mci/imx-esdhc.h +++ b/drivers/mci/imx-esdhc.h @@ -39,14 +39,30 @@ #define PIO_TIMEOUT 100000 +#define SDHCI_ACMD12_ERR__HOST_CONTROL2_UHSM GENMASK(18, 16) /* Layerscape specific */ + #define IMX_SDHCI_WML 0x44 #define IMX_SDHCI_MIXCTRL 0x48 +/* Imported from Linux Kernel drivers/mmc/host/sdhci-esdhc-imx.c */ +#define MIX_CTRL_DDREN BIT(3) +#define MIX_CTRL_DTDSEL_READ BIT(4) +#define MIX_CTRL_AC23EN BIT(7) +#define MIX_CTRL_EXE_TUNE BIT(22) +#define MIX_CTRL_SMPCLK_SEL BIT(23) +#define MIX_CTRL_AUTO_TUNE_EN BIT(24) +#define MIX_CTRL_FBCLK_SEL BIT(25) +#define MIX_CTRL_HS400_EN BIT(26) +#define MIX_CTRL_HS400_ES BIT(27) +/* Bits 3 and 6 are not SDHCI standard definitions */ +#define MIX_CTRL_SDHCI_MASK 0xb7 +/* Tuning bits */ +#define MIX_CTRL_TUNING_MASK 0x03c00000 #define IMX_SDHCI_DLL_CTRL 0x60 #define IMX_SDHCI_MIX_CTRL_FBCLK_SEL BIT(25) #define ESDHC_DMA_SYSCTL 0x40c /* Layerscape specific */ #define ESDHC_SYSCTL_DMA_SNOOP BIT(6) - +#define ESDHC_SYSCTL_PERIPHERAL_CLK_SEL BIT(19) /* * The CMDTYPE of the CMD register (offset 0xE) should be set to @@ -89,8 +105,8 @@ #define ESDHC_FLAG_HS400 BIT(9) /* Need to access registers in bigendian mode */ #define ESDHC_FLAG_BIGENDIAN BIT(10) -/* Enable cache snooping */ -#define ESDHC_FLAG_CACHE_SNOOPING BIT(11) +/* Layerscape variant ls1046a, ls1028a, ls1088a, revisit for ls1012a */ +#define ESDHC_FLAG_LAYERSCAPE BIT(11) struct esdhc_soc_data { u32 flags; @@ -100,7 +116,7 @@ struct esdhc_soc_data { struct fsl_esdhc_host { struct mci_host mci; struct clk *clk; - struct device_d *dev; + struct device *dev; const struct esdhc_soc_data *socdata; struct sdhci sdhci; }; @@ -110,6 +126,11 @@ static inline int esdhc_is_usdhc(struct fsl_esdhc_host *data) return !!(data->socdata->flags & ESDHC_FLAG_USDHC); } +static inline int esdhc_is_layerscape(struct fsl_esdhc_host *data) +{ + return !!(data->socdata->flags & ESDHC_FLAG_LAYERSCAPE); +} + static inline struct fsl_esdhc_host *sdhci_to_esdhc(struct sdhci *sdhci) { return container_of(sdhci, struct fsl_esdhc_host, sdhci); |