fsl_esdhc: Add the workaround for erratum ESDHC-A001 (enable on P2020)
Data timeout counter (SYSCTL[DTOCV]) is not reliable for values of 4, 8, and 12. Program one more than the desired value: 4 -> 5, 8 -> 9, 12 -> 13. Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
parent
6e7f0bc0ce
commit
5103a03a0b
@ -59,6 +59,9 @@ static int do_errata(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||
#if defined(CONFIG_SYS_FSL_ERRATUM_ESDHC136)
|
||||
puts("Work-around for Erratum ESDHC136 enabled\n");
|
||||
#endif
|
||||
#if defined(CONFIG_SYS_FSL_ERRATUM_ESDHC_A001)
|
||||
puts("Work-around for Erratum ESDHC-A001 enabled\n");
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_FSL_ERRATUM_CPC_A002
|
||||
puts("Work-around for Erratum CPC-A002 enabled\n");
|
||||
#endif
|
||||
|
@ -131,12 +131,14 @@
|
||||
#define CONFIG_SYS_FSL_NUM_LAWS 12
|
||||
#define CONFIG_SYS_FSL_SEC_COMPAT 2
|
||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
|
||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
|
||||
|
||||
#elif defined(CONFIG_P2020)
|
||||
#define CONFIG_MAX_CPUS 2
|
||||
#define CONFIG_SYS_FSL_NUM_LAWS 12
|
||||
#define CONFIG_SYS_FSL_SEC_COMPAT 2
|
||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
|
||||
#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
|
||||
|
||||
#elif defined(CONFIG_PPC_P2040)
|
||||
#define CONFIG_MAX_CPUS 4
|
||||
|
@ -219,6 +219,11 @@ static int esdhc_setup_data(struct mmc *mmc, struct mmc_data *data)
|
||||
if (timeout < 0)
|
||||
timeout = 0;
|
||||
|
||||
#ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
|
||||
if ((timeout == 4) || (timeout == 8) || (timeout == 12))
|
||||
timeout++;
|
||||
#endif
|
||||
|
||||
esdhc_clrsetbits32(®s->sysctl, SYSCTL_TIMEOUT_MASK, timeout << 16);
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user