[U-Boot] [PATCH 1/2] esdhc: memset mmc struct before putting into use

struct mmc should be clear to all '0' after malloc to avoid unexpect variable value.
Like mmc->has_init = xxx. In this case mmcinfo will believe the card had been initialized before and skip the initialization.
Test on P5040 and T4240, Error Log:
=> mmcinfo Device: FSL_SDHC Manufacturer ID: 0 OEM: 0 Name: Tran Speed: 0 Rd Block Len: 0 MMC version 0.0 High Capacity: No Capacity: 0 Bytes Bus Width: 0-bit =>
Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com Signed-off-by: Xie Shaohui-B21989 B21989@freescale.com --- drivers/mmc/fsl_esdhc.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index a7170b4..d4c1eef 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -521,6 +521,7 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg) if (!mmc) return -ENOMEM;
+ memset(mmc, 0, sizeof(struct mmc)); sprintf(mmc->name, "FSL_SDHC"); regs = (struct fsl_esdhc *)cfg->esdhc_base;

T4240 eSDHC host capabilities reigster should have VS33 bit define. hack the code to add the 3.3 voltage support
Signed-off-by: Roy Zang tie-fei.zang@freescale.com Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com --- arch/powerpc/include/asm/config_mpc85xx.h | 1 + drivers/mmc/fsl_esdhc.c | 6 ++++++ 2 files changed, 7 insertions(+)
diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index 946ea97..84e79c8 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -596,6 +596,7 @@ #define CONFIG_SYS_FSL_SRIO_LIODN #define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #define CONFIG_SYS_FSL_ERRATUM_A004468 #define CONFIG_SYS_FSL_ERRATUM_A_004934 #define CONFIG_SYS_FSL_ERRATUM_A005871 diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index d4c1eef..b8b2907 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -545,6 +545,12 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg) caps = caps & ~(ESDHC_HOSTCAPBLT_SRS | ESDHC_HOSTCAPBLT_VS18 | ESDHC_HOSTCAPBLT_VS30); #endif + +/* T4240 host controller capabilities register should have VS33 bit */ +#ifdef CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 + caps = caps | ESDHC_HOSTCAPBLT_VS33; +#endif + if (caps & ESDHC_HOSTCAPBLT_VS18) voltage_caps |= MMC_VDD_165_195; if (caps & ESDHC_HOSTCAPBLT_VS30)

On Oct 24, 2013, at 6:54 PM, Haijun Zhang wrote:
T4240 eSDHC host capabilities reigster should have VS33 bit define. hack the code to add the 3.3 voltage support
Shall we call it quirk rather than hack? Native English speakers, please chime in.
York

On Fri, 2013-10-25 at 09:54 +0800, Haijun Zhang wrote:
T4240 eSDHC host capabilities reigster should have VS33 bit define. hack the code to add the 3.3 voltage support
Signed-off-by: Roy Zang tie-fei.zang@freescale.com Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com
arch/powerpc/include/asm/config_mpc85xx.h | 1 + drivers/mmc/fsl_esdhc.c | 6 ++++++ 2 files changed, 7 insertions(+)
diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index 946ea97..84e79c8 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -596,6 +596,7 @@ #define CONFIG_SYS_FSL_SRIO_LIODN #define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #define CONFIG_SYS_FSL_ERRATUM_A004468 #define CONFIG_SYS_FSL_ERRATUM_A_004934 #define CONFIG_SYS_FSL_ERRATUM_A005871 diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index d4c1eef..b8b2907 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -545,6 +545,12 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg) caps = caps & ~(ESDHC_HOSTCAPBLT_SRS | ESDHC_HOSTCAPBLT_VS18 | ESDHC_HOSTCAPBLT_VS30); #endif
+/* T4240 host controller capabilities register should have VS33 bit */ +#ifdef CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
- caps = caps | ESDHC_HOSTCAPBLT_VS33;
+#endif
Is there an erratum associated with this? Is this that t4240qds-specific bug, or a different bug that affects all t4240?
-Scott

于 2013/10/30 2:34, Scott Wood 写道:
On Fri, 2013-10-25 at 09:54 +0800, Haijun Zhang wrote:
T4240 eSDHC host capabilities reigster should have VS33 bit define. hack the code to add the 3.3 voltage support
Signed-off-by: Roy Zang tie-fei.zang@freescale.com Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com
arch/powerpc/include/asm/config_mpc85xx.h | 1 + drivers/mmc/fsl_esdhc.c | 6 ++++++ 2 files changed, 7 insertions(+)
diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index 946ea97..84e79c8 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -596,6 +596,7 @@ #define CONFIG_SYS_FSL_SRIO_LIODN #define CONFIG_SYS_FSL_USB_DUAL_PHY_ENABLE #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #define CONFIG_SYS_FSL_ERRATUM_A004468 #define CONFIG_SYS_FSL_ERRATUM_A_004934 #define CONFIG_SYS_FSL_ERRATUM_A005871 diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index d4c1eef..b8b2907 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -545,6 +545,12 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg) caps = caps & ~(ESDHC_HOSTCAPBLT_SRS | ESDHC_HOSTCAPBLT_VS18 | ESDHC_HOSTCAPBLT_VS30); #endif
+/* T4240 host controller capabilities register should have VS33 bit */ +#ifdef CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
- caps = caps | ESDHC_HOSTCAPBLT_VS33;
+#endif
Is there an erratum associated with this? Is this that t4240qds-specific bug, or a different bug that affects all t4240?
No such relevant errata. I think this capacity missing is also exist on other T4240 board but not be confirmed. So, I update this patch to make sure the change only affect T4240QDS.
-Scott

Haijun Zhang Haijun.Zhang@freescale.com wrote on 10/24/2013 08:54:42 PM:
struct mmc should be clear to all '0' after malloc to avoid unexpect variable value.
Like mmc->has_init = xxx. In this case mmcinfo will believe the card had been initialized before and skip the initialization.
Test on P5040 and T4240, Error Log:
=> mmcinfo Device: FSL_SDHC Manufacturer ID: 0 OEM: 0 Name: Tran Speed: 0 Rd Block Len: 0 MMC version 0.0 High Capacity: No Capacity: 0 Bytes Bus Width: 0-bit =>
Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com Signed-off-by: Xie Shaohui-B21989 B21989@freescale.com
Tested-by: Ryan Barnett rjbarnet@rockwellcollins.com
Verified that this patch fixes issues related to booting from eSDHC interface on the P2041RDB with U-Boot 2013.10.
drivers/mmc/fsl_esdhc.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index a7170b4..d4c1eef 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -521,6 +521,7 @@ int fsl_esdhc_initialize(bd_t *bis, struct
fsl_esdhc_cfg *cfg)
if (!mmc) return -ENOMEM;
- memset(mmc, 0, sizeof(struct mmc)); sprintf(mmc->name, "FSL_SDHC"); regs = (struct fsl_esdhc *)cfg->esdhc_base;
-- 1.8.4
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

Thanks. Barnett
:-) 于 2013/10/26 0:28, Ryan Barnett 写道:
Haijun Zhang Haijun.Zhang@freescale.com wrote on 10/24/2013 08:54:42 PM:
struct mmc should be clear to all '0' after malloc to avoid unexpect variable value.
Like mmc->has_init = xxx. In this case mmcinfo will believe the card had been initialized before and skip the initialization.
Test on P5040 and T4240, Error Log:
=> mmcinfo Device: FSL_SDHC Manufacturer ID: 0 OEM: 0 Name: Tran Speed: 0 Rd Block Len: 0 MMC version 0.0 High Capacity: No Capacity: 0 Bytes Bus Width: 0-bit =>
Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com Signed-off-by: Xie Shaohui-B21989 B21989@freescale.com
Tested-by: Ryan Barnett rjbarnet@rockwellcollins.com
Verified that this patch fixes issues related to booting from eSDHC interface on the P2041RDB with U-Boot 2013.10.
drivers/mmc/fsl_esdhc.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index a7170b4..d4c1eef 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -521,6 +521,7 @@ int fsl_esdhc_initialize(bd_t *bis, struct
fsl_esdhc_cfg *cfg)
if (!mmc) return -ENOMEM;
- memset(mmc, 0, sizeof(struct mmc)); sprintf(mmc->name, "FSL_SDHC"); regs = (struct fsl_esdhc *)cfg->esdhc_base;
-- 1.8.4
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
participants (5)
-
Haijun Zhang
-
Ryan Barnett
-
Scott Wood
-
sun york-R58495
-
Zhang Haijun