|
@@ -93,7 +93,7 @@ struct omap_hsmmc_data {
|
|
|
enum bus_mode mode;
|
|
|
#endif
|
|
|
u8 controller_flags;
|
|
|
-#ifndef CONFIG_OMAP34XX
|
|
|
+#ifdef CONFIG_MMC_OMAP_HS_ADMA
|
|
|
struct omap_hsmmc_adma_desc *adma_desc_table;
|
|
|
uint desc_slot;
|
|
|
#endif
|
|
@@ -117,7 +117,7 @@ struct omap_mmc_of_data {
|
|
|
u8 controller_flags;
|
|
|
};
|
|
|
|
|
|
-#ifndef CONFIG_OMAP34XX
|
|
|
+#ifdef CONFIG_MMC_OMAP_HS_ADMA
|
|
|
struct omap_hsmmc_adma_desc {
|
|
|
u8 attr;
|
|
|
u8 reserved;
|
|
@@ -741,7 +741,7 @@ static int omap_hsmmc_init_setup(struct mmc *mmc)
|
|
|
return -ETIMEDOUT;
|
|
|
}
|
|
|
}
|
|
|
-#ifndef CONFIG_OMAP34XX
|
|
|
+#ifdef CONFIG_MMC_OMAP_HS_ADMA
|
|
|
reg_val = readl(&mmc_base->hl_hwinfo);
|
|
|
if (reg_val & MADMA_EN)
|
|
|
priv->controller_flags |= OMAP_HSMMC_USE_ADMA;
|
|
@@ -834,7 +834,7 @@ static void mmc_reset_controller_fsm(struct hsmmc *mmc_base, u32 bit)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#ifndef CONFIG_OMAP34XX
|
|
|
+#ifdef CONFIG_MMC_OMAP_HS_ADMA
|
|
|
static void omap_hsmmc_adma_desc(struct mmc *mmc, char *buf, u16 len, bool end)
|
|
|
{
|
|
|
struct omap_hsmmc_data *priv = omap_hsmmc_get_data(mmc);
|
|
@@ -1037,7 +1037,7 @@ static int omap_hsmmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
|
|
|
else
|
|
|
flags |= (DP_DATA | DDIR_WRITE);
|
|
|
|
|
|
-#ifndef CONFIG_OMAP34XX
|
|
|
+#ifdef CONFIG_MMC_OMAP_HS_ADMA
|
|
|
if ((priv->controller_flags & OMAP_HSMMC_USE_ADMA) &&
|
|
|
!mmc_is_tuning_cmd(cmd->cmdidx)) {
|
|
|
omap_hsmmc_prepare_data(mmc, data);
|
|
@@ -1082,7 +1082,7 @@ static int omap_hsmmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-#ifndef CONFIG_OMAP34XX
|
|
|
+#ifdef CONFIG_MMC_OMAP_HS_ADMA
|
|
|
if ((priv->controller_flags & OMAP_HSMMC_USE_ADMA) && data &&
|
|
|
!mmc_is_tuning_cmd(cmd->cmdidx)) {
|
|
|
u32 sz_mb, timeout;
|
|
@@ -1181,8 +1181,9 @@ static int mmc_read_data(struct hsmmc *mmc_base, char *buf, unsigned int size)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+#if CONFIG_IS_ENABLED(MMC_WRITE)
|
|
|
static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
|
|
|
- unsigned int size)
|
|
|
+ unsigned int size)
|
|
|
{
|
|
|
unsigned int *input_buf = (unsigned int *)buf;
|
|
|
unsigned int mmc_stat;
|
|
@@ -1235,7 +1236,13 @@ static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
-
|
|
|
+#else
|
|
|
+static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
|
|
|
+ unsigned int size)
|
|
|
+{
|
|
|
+ return -ENOTSUPP;
|
|
|
+}
|
|
|
+#endif
|
|
|
static void omap_hsmmc_stop_clock(struct hsmmc *mmc_base)
|
|
|
{
|
|
|
writel(readl(&mmc_base->sysctl) & ~CEN_ENABLE, &mmc_base->sysctl);
|
|
@@ -1825,6 +1832,8 @@ static int omap_hsmmc_ofdata_to_platdata(struct udevice *dev)
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
|
|
|
+ if (!cfg->f_max)
|
|
|
+ cfg->f_max = 52000000;
|
|
|
cfg->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
|
|
|
cfg->f_min = 400000;
|
|
|
cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
|
|
@@ -1858,8 +1867,8 @@ static int omap_hsmmc_ofdata_to_platdata(struct udevice *dev)
|
|
|
static int omap_hsmmc_bind(struct udevice *dev)
|
|
|
{
|
|
|
struct omap_hsmmc_plat *plat = dev_get_platdata(dev);
|
|
|
-
|
|
|
- return mmc_bind(dev, &plat->mmc, &plat->cfg);
|
|
|
+ plat->mmc = calloc(1, sizeof(struct mmc));
|
|
|
+ return mmc_bind(dev, plat->mmc, &plat->cfg);
|
|
|
}
|
|
|
#endif
|
|
|
static int omap_hsmmc_probe(struct udevice *dev)
|
|
@@ -1882,7 +1891,7 @@ static int omap_hsmmc_probe(struct udevice *dev)
|
|
|
#endif
|
|
|
|
|
|
#ifdef CONFIG_BLK
|
|
|
- mmc = &plat->mmc;
|
|
|
+ mmc = plat->mmc;
|
|
|
#else
|
|
|
mmc = mmc_create(cfg, priv);
|
|
|
if (mmc == NULL)
|