mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 13:16:41 +00:00
Allwinner: u-boot: Fix boot on at least one board
This commit is contained in:
parent
4bc6d8e381
commit
a043f32206
@ -0,0 +1,49 @@
|
|||||||
|
From: Da Xue <da@libre.computer>
|
||||||
|
Date: Thu, 21 Jul 2022 18:08:21 -0400
|
||||||
|
|
||||||
|
Some users experienced problems booting u-boot from SPL hanging here:
|
||||||
|
|
||||||
|
Trying to boot from MMC1 or Trying to boot from MMC2
|
||||||
|
|
||||||
|
This seems to occur with both MicroSD and eMMC modules on ALL-H3-CC.
|
||||||
|
Increasing the delay after mmc reset fixes these boot problems.
|
||||||
|
Some MicroSD cards are impacted more than others so it is possible that
|
||||||
|
MicroSD internals need time to stabilize. Below is some failure data.
|
||||||
|
|
||||||
|
sandisk ultra 64gb 9/20 with 1ms, 20/20 with 10ms
|
||||||
|
sandisk ultra 16gb 2/20 with 1ms, 20/20 with 10ms
|
||||||
|
sandisk extreme 16gb 6/20 with 10ms, 20/20 with 20ms
|
||||||
|
|
||||||
|
A quick comparison of schematics show series resistors for ESD
|
||||||
|
protection on the MicroSD GPIOs not present on all H3/H5 boards.
|
||||||
|
It is not known if this is related to the issue.
|
||||||
|
|
||||||
|
This patch adds a fixed 20ms delay to mmc init to mitigate the problem.
|
||||||
|
If boot time optimization is required and the platform does not require
|
||||||
|
the delay. The delay can be replaced with:
|
||||||
|
|
||||||
|
writel(SUNXI_MMC_GCTRL_RESET, &priv->reg->gctrl);
|
||||||
|
if (wait_for_bit_le32( &priv->reg->gctrl,
|
||||||
|
SUNXI_MMC_GCTRL_RESET, false, 20, false)) {
|
||||||
|
printf("%s: Timeout\n", __func__);
|
||||||
|
return -ETIMEDOUT;
|
||||||
|
}
|
||||||
|
|
||||||
|
Signed-off-by: Da Xue <da@libre.computer>
|
||||||
|
---
|
||||||
|
drivers/mmc/sunxi_mmc.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/mmc/sunxi_mmc.c b/drivers/mmc/sunxi_mmc.c
|
||||||
|
index 1bb7b6d0e9..f7942b69ce 100644
|
||||||
|
--- a/drivers/mmc/sunxi_mmc.c
|
||||||
|
+++ b/drivers/mmc/sunxi_mmc.c
|
||||||
|
@@ -297,7 +297,7 @@ static int sunxi_mmc_core_init(struct mmc *mmc)
|
||||||
|
|
||||||
|
/* Reset controller */
|
||||||
|
writel(SUNXI_MMC_GCTRL_RESET, &priv->reg->gctrl);
|
||||||
|
- udelay(1000);
|
||||||
|
+ udelay(20000);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user