
suniv cannot boot with this mmc optimization, as suniv fifo level register is only 4 bits.
Disable this optimization for suniv for now.
Signed-off-by: Yifan Gu me@yifangu.com --- drivers/mmc/sunxi_mmc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c index 178b8cf106..779c10407a 100644 --- a/drivers/mmc/sunxi_mmc.c +++ b/drivers/mmc/sunxi_mmc.c @@ -324,7 +324,7 @@ static int mmc_trans_data_by_cpu(struct sunxi_mmc_priv *priv, struct mmc *mmc, start = get_timer(0);
for (i = 0; i < word_cnt;) { - unsigned int in_fifo; + __maybe_unused unsigned int in_fifo;
while ((status = readl(&priv->reg->status)) & status_bit) { if (get_timer(start) > timeout_msecs) @@ -343,6 +343,9 @@ static int mmc_trans_data_by_cpu(struct sunxi_mmc_priv *priv, struct mmc *mmc, continue; }
+#ifdef CONFIG_MACH_SUNIV + buff[i++] = readl(&priv->reg->fifo); +#else /* * The status register holds the current FIFO level, so we * can be sure to collect as many words from the FIFO @@ -355,6 +358,7 @@ static int mmc_trans_data_by_cpu(struct sunxi_mmc_priv *priv, struct mmc *mmc, in_fifo--) buff[i++] = readl_relaxed(&priv->reg->fifo); dmb(); +#endif }
return 0;