[U-Boot] [PATCH] ts4800: add CONFIG_SYS_FSL_ERRATUM_ESDHC_A001

This commit fixes the MMC data transactions timeout problem on the TS4800.
The changes introduced in the commit e978a31 on the timeout calculation for the MMC data transactions has revealed there is something wrong with the timeout setting of the eSDHC controller used in the IMX51.
The IMX51 seems to be concerned by this erratum and without this change the MMC driver is unable to do any transactions.
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com --- include/configs/ts4800.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/configs/ts4800.h b/include/configs/ts4800.h index fcc9d80..5e5e4d3 100644 --- a/include/configs/ts4800.h +++ b/include/configs/ts4800.h @@ -63,6 +63,8 @@ #define CONFIG_FSL_ESDHC #define CONFIG_SYS_FSL_ESDHC_ADDR MMC_SDHC1_BASE_ADDR
+#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001 + #define CONFIG_MMC
#define CONFIG_CMD_MMC

Hi, I add Fabio Estevam in the loop as suggested by Marek Vasut on IRC.
On 04/21/2016 01:37 PM, Sebastien Bourdelin wrote:
This commit fixes the MMC data transactions timeout problem on the TS4800.
The changes introduced in the commit e978a31 on the timeout calculation for the MMC data transactions has revealed there is something wrong with the timeout setting of the eSDHC controller used in the IMX51.
The IMX51 seems to be concerned by this erratum and without this change the MMC driver is unable to do any transactions.
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
include/configs/ts4800.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/configs/ts4800.h b/include/configs/ts4800.h index fcc9d80..5e5e4d3 100644 --- a/include/configs/ts4800.h +++ b/include/configs/ts4800.h @@ -63,6 +63,8 @@ #define CONFIG_FSL_ESDHC #define CONFIG_SYS_FSL_ESDHC_ADDR MMC_SDHC1_BASE_ADDR
+#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
#define CONFIG_MMC
#define CONFIG_CMD_MMC
The problem we found is related to the DTOCV field in the system control register of the IMX51's eSDHC controller. If we set the value 4, 8 or 12 in this DTOCV field the MMC driver is unable to do any data transactions, we have a timeout (i.e: the DTOE field in the Interrupt status register of the eSDHC controller is set to 1). It works with other values, at least i tried with 5, 9, 11, 13 without having any timeout.
Our guess and because we didn't find any errata related to this issue for the IMX51 is that this device is impacted by the same problem then devices MPC83XX and MPC85XX (see the ESDHC-A001 errata in the datasheet: http://pdf.datasheetarchive.com/indexerfiles/Datasheets-SW1/DSASW0012367.pdf)
Perhaps someone from Freescale can give us more informations.
Regards, Sebastien.

Hi,
On 04/21/2016 05:39 PM, Sebastien Bourdelin wrote:
Hi, I add Fabio Estevam in the loop as suggested by Marek Vasut on IRC.
On 04/21/2016 01:37 PM, Sebastien Bourdelin wrote:
This commit fixes the MMC data transactions timeout problem on the TS4800.
The changes introduced in the commit e978a31 on the timeout calculation for the MMC data transactions has revealed there is something wrong with the timeout setting of the eSDHC controller used in the IMX51.
The IMX51 seems to be concerned by this erratum and without this change the MMC driver is unable to do any transactions.
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
include/configs/ts4800.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/configs/ts4800.h b/include/configs/ts4800.h index fcc9d80..5e5e4d3 100644 --- a/include/configs/ts4800.h +++ b/include/configs/ts4800.h @@ -63,6 +63,8 @@ #define CONFIG_FSL_ESDHC #define CONFIG_SYS_FSL_ESDHC_ADDR MMC_SDHC1_BASE_ADDR
+#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
#define CONFIG_MMC
#define CONFIG_CMD_MMC
The problem we found is related to the DTOCV field in the system control register of the IMX51's eSDHC controller. If we set the value 4, 8 or 12 in this DTOCV field the MMC driver is unable to do any data transactions, we have a timeout (i.e: the DTOE field in the Interrupt status register of the eSDHC controller is set to 1). It works with other values, at least i tried with 5, 9, 11, 13 without having any timeout.
Our guess and because we didn't find any errata related to this issue for the IMX51 is that this device is impacted by the same problem then devices MPC83XX and MPC85XX (see the ESDHC-A001 errata in the datasheet: http://pdf.datasheetarchive.com/indexerfiles/Datasheets-SW1/DSASW0012367.pdf)
Perhaps someone from Freescale can give us more informations.
Regards, Sebastien.
Did someone from Freescale had the time to take a look at this patch and can give us more information? We still need it to boot the TS4800.
Regards, Sebastien.

On 10/05/2016 22:36, Sebastien Bourdelin wrote:
Hi,
On 04/21/2016 05:39 PM, Sebastien Bourdelin wrote:
Hi, I add Fabio Estevam in the loop as suggested by Marek Vasut on IRC.
On 04/21/2016 01:37 PM, Sebastien Bourdelin wrote:
This commit fixes the MMC data transactions timeout problem on the TS4800.
The changes introduced in the commit e978a31 on the timeout calculation for the MMC data transactions has revealed there is something wrong with the timeout setting of the eSDHC controller used in the IMX51.
The IMX51 seems to be concerned by this erratum and without this change the MMC driver is unable to do any transactions.
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
include/configs/ts4800.h | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/include/configs/ts4800.h b/include/configs/ts4800.h index fcc9d80..5e5e4d3 100644 --- a/include/configs/ts4800.h +++ b/include/configs/ts4800.h @@ -63,6 +63,8 @@ #define CONFIG_FSL_ESDHC #define CONFIG_SYS_FSL_ESDHC_ADDR MMC_SDHC1_BASE_ADDR
+#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
#define CONFIG_MMC
#define CONFIG_CMD_MMC
The problem we found is related to the DTOCV field in the system control register of the IMX51's eSDHC controller. If we set the value 4, 8 or 12 in this DTOCV field the MMC driver is unable to do any data transactions, we have a timeout (i.e: the DTOE field in the Interrupt status register of the eSDHC controller is set to 1). It works with other values, at least i tried with 5, 9, 11, 13 without having any timeout.
Our guess and because we didn't find any errata related to this issue for the IMX51 is that this device is impacted by the same problem then devices MPC83XX and MPC85XX (see the ESDHC-A001 errata in the datasheet: http://pdf.datasheetarchive.com/indexerfiles/Datasheets-SW1/DSASW0012367.pdf)
Perhaps someone from Freescale can give us more informations.
Regards, Sebastien.
Did someone from Freescale had the time to take a look at this patch and can give us more information? We still need it to boot the TS4800.
Checking the thread, it looks looks like that there is no progress on it. Anyway, the patch is just related to ts4800 without any effects to other boards. I am merging it.
Best regards, Stefano Babic

Hi Sebastien,
On Thu, Apr 21, 2016 at 2:37 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
This commit fixes the MMC data transactions timeout problem on the TS4800.
The changes introduced in the commit e978a31 on the timeout calculation for the MMC data transactions has revealed there is something wrong with the timeout setting of the eSDHC controller used in the IMX51.
The IMX51 seems to be concerned by this erratum and without this change the MMC driver is unable to do any transactions.
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
Does this issue only happen with eMMC and not with SD card? mx51evk boots fine without this config option.
As this change affects only ts4800.h I think it is safer to apply for this release:
Reviewed-by: Fabio Estevam fabio.estevam@nxp.com

Hi Fabio,
On 05/10/2016 04:43 PM, Fabio Estevam wrote:
Hi Sebastien,
On Thu, Apr 21, 2016 at 2:37 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
This commit fixes the MMC data transactions timeout problem on the TS4800.
The changes introduced in the commit e978a31 on the timeout calculation for the MMC data transactions has revealed there is something wrong with the timeout setting of the eSDHC controller used in the IMX51.
The IMX51 seems to be concerned by this erratum and without this change the MMC driver is unable to do any transactions.
Signed-off-by: Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com
Does this issue only happen with eMMC and not with SD card? mx51evk boots fine without this config option.
This issue happen with the SD card, i currently didn't found the time to try with eMMC.
Best Regards, Sebastien.
As this change affects only ts4800.h I think it is safer to apply for this release:
Reviewed-by: Fabio Estevam fabio.estevam@nxp.com

Hi Sebastien,
On Fri, May 20, 2016 at 5:13 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
This issue happen with the SD card, i currently didn't found the time to try with eMMC.
Ok, we also boot from SD card on the mx51evk and never observed this issue there.
What is the MX51 silicon version you have on your board?

Hi Fabio,
On 05/20/2016 05:40 PM, Fabio Estevam wrote:
Hi Sebastien,
On Fri, May 20, 2016 at 5:13 PM, Sebastien Bourdelin sebastien.bourdelin@savoirfairelinux.com wrote:
This issue happen with the SD card, i currently didn't found the time to try with eMMC.
Ok, we also boot from SD card on the mx51evk and never observed this issue there.
What is the MX51 silicon version you have on your board?
It's an MX51 rev 3.0, if you need more information, feel free to ask.
Regards, Sebastien.
participants (3)
-
Fabio Estevam
-
Sebastien Bourdelin
-
Stefano Babic