11
11
#include <linux/slab.h>
12
12
#include <linux/delay.h>
13
13
#include <linux/ktime.h>
14
+ #include <linux/iopoll.h>
14
15
#include <linux/of_address.h>
15
16
16
17
#include "sdhci-pltfm.h"
109
110
#define XENON_EMMC_PHY_LOGIC_TIMING_ADJUST (XENON_EMMC_PHY_REG_BASE + 0x18)
110
111
#define XENON_LOGIC_TIMING_VALUE 0x00AA8977
111
112
113
+ #define XENON_MAX_PHY_TIMEOUT_LOOPS 100
114
+
112
115
/*
113
116
* List offset of PHY registers and some special register values
114
117
* in eMMC PHY 5.0 or eMMC PHY 5.1
@@ -216,6 +219,19 @@ static int xenon_alloc_emmc_phy(struct sdhci_host *host)
216
219
return 0 ;
217
220
}
218
221
222
+ static int xenon_check_stability_internal_clk (struct sdhci_host * host )
223
+ {
224
+ u32 reg ;
225
+ int err ;
226
+
227
+ err = read_poll_timeout (sdhci_readw , reg , reg & SDHCI_CLOCK_INT_STABLE ,
228
+ 1100 , 20000 , false, host , SDHCI_CLOCK_CONTROL );
229
+ if (err )
230
+ dev_err (mmc_dev (host -> mmc ), "phy_init: Internal clock never stabilized.\n" );
231
+
232
+ return err ;
233
+ }
234
+
219
235
/*
220
236
* eMMC 5.0/5.1 PHY init/re-init.
221
237
* eMMC PHY init should be executed after:
@@ -232,6 +248,11 @@ static int xenon_emmc_phy_init(struct sdhci_host *host)
232
248
struct xenon_priv * priv = sdhci_pltfm_priv (pltfm_host );
233
249
struct xenon_emmc_phy_regs * phy_regs = priv -> emmc_phy_regs ;
234
250
251
+ int ret = xenon_check_stability_internal_clk (host );
252
+
253
+ if (ret )
254
+ return ret ;
255
+
235
256
reg = sdhci_readl (host , phy_regs -> timing_adj );
236
257
reg |= XENON_PHY_INITIALIZAION ;
237
258
sdhci_writel (host , reg , phy_regs -> timing_adj );
@@ -259,18 +280,27 @@ static int xenon_emmc_phy_init(struct sdhci_host *host)
259
280
/* get the wait time */
260
281
wait /= clock ;
261
282
wait ++ ;
262
- /* wait for host eMMC PHY init completes */
263
- udelay (wait );
264
283
265
- reg = sdhci_readl (host , phy_regs -> timing_adj );
266
- reg &= XENON_PHY_INITIALIZAION ;
267
- if (reg ) {
284
+ /*
285
+ * AC5X spec says bit must be polled until zero.
286
+ * We see cases in which timeout can take longer
287
+ * than the standard calculation on AC5X, which is
288
+ * expected following the spec comment above.
289
+ * According to the spec, we must wait as long as
290
+ * it takes for that bit to toggle on AC5X.
291
+ * Cap that with 100 delay loops so we won't get
292
+ * stuck here forever:
293
+ */
294
+
295
+ ret = read_poll_timeout (sdhci_readl , reg ,
296
+ !(reg & XENON_PHY_INITIALIZAION ),
297
+ wait , XENON_MAX_PHY_TIMEOUT_LOOPS * wait ,
298
+ false, host , phy_regs -> timing_adj );
299
+ if (ret )
268
300
dev_err (mmc_dev (host -> mmc ), "eMMC PHY init cannot complete after %d us\n" ,
269
- wait );
270
- return - ETIMEDOUT ;
271
- }
301
+ wait * XENON_MAX_PHY_TIMEOUT_LOOPS );
272
302
273
- return 0 ;
303
+ return ret ;
274
304
}
275
305
276
306
#define ARMADA_3700_SOC_PAD_1_8V 0x1
0 commit comments