[U-Boot] [PATCH 1/2 V3] 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 Tested-by: Ryan Barnett rjbarnet@rockwellcollins.com --- changes for V3: - Only add Tested-by no other changes changes for V2: - No changes
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;

T4240QDS eSDHC host capabilities reigster should have VS33 bit define. Add quirk CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 to deal with capacity missing
Signed-off-by: Roy Zang tie-fei.zang@freescale.com Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com --- changes for V3: - Move the macro define to T4240QDS.h
drivers/mmc/fsl_esdhc.c | 6 ++++++ include/configs/T4240QDS.h | 1 + 2 files changed, 7 insertions(+)
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) diff --git a/include/configs/T4240QDS.h b/include/configs/T4240QDS.h index 590799c..3777ccb 100644 --- a/include/configs/T4240QDS.h +++ b/include/configs/T4240QDS.h @@ -463,6 +463,7 @@ unsigned long get_board_ddr_clk(void); #define CONFIG_CMD_EXT2 #define CONFIG_CMD_FAT #define CONFIG_DOS_PARTITION +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #endif
#define CONFIG_BOOTDELAY 10 /* -1 disables auto-boot */

Hi Haijun,
On Oct 31, 2013, at 3:38 AM, Haijun Zhang wrote:
T4240QDS eSDHC host capabilities reigster should have VS33 bit define. Add quirk CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 to deal with capacity missing
Signed-off-by: Roy Zang tie-fei.zang@freescale.com Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com
changes for V3:
- Move the macro define to T4240QDS.h
drivers/mmc/fsl_esdhc.c | 6 ++++++ include/configs/T4240QDS.h | 1 + 2 files changed, 7 insertions(+)
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)
diff --git a/include/configs/T4240QDS.h b/include/configs/T4240QDS.h index 590799c..3777ccb 100644 --- a/include/configs/T4240QDS.h +++ b/include/configs/T4240QDS.h @@ -463,6 +463,7 @@ unsigned long get_board_ddr_clk(void); #define CONFIG_CMD_EXT2 #define CONFIG_CMD_FAT #define CONFIG_DOS_PARTITION +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #endif
#define CONFIG_BOOTDELAY 10 /* -1 disables auto-boot */
1.8.4
Applied, thanks.
Acked-by: Pantelis Antoniou panto@antoniou-consulting.com

Thanks a lot.
? 2013/10/31 15:53, Pantelis Antoniou ??:
Hi Haijun,
On Oct 31, 2013, at 3:38 AM, Haijun Zhang wrote:
T4240QDS eSDHC host capabilities reigster should have VS33 bit define. Add quirk CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 to deal with capacity missing
Signed-off-by: Roy Zang tie-fei.zang@freescale.com Signed-off-by: Haijun Zhang Haijun.Zhang@freescale.com
changes for V3:
- Move the macro define to T4240QDS.h
drivers/mmc/fsl_esdhc.c | 6 ++++++ include/configs/T4240QDS.h | 1 + 2 files changed, 7 insertions(+)
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)
diff --git a/include/configs/T4240QDS.h b/include/configs/T4240QDS.h index 590799c..3777ccb 100644 --- a/include/configs/T4240QDS.h +++ b/include/configs/T4240QDS.h @@ -463,6 +463,7 @@ unsigned long get_board_ddr_clk(void); #define CONFIG_CMD_EXT2 #define CONFIG_CMD_FAT #define CONFIG_DOS_PARTITION +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #endif
#define CONFIG_BOOTDELAY 10 /* -1 disables auto-boot */
1.8.4
Applied, thanks.
Acked-by: Pantelis Antoniou panto@antoniou-consulting.com

Hi Haijun,
On Oct 31, 2013, at 3:38 AM, Haijun Zhang wrote:
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
changes for V3:
- Only add Tested-by no other changes
changes for V2:
- No changes
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
Applied, thanks.
Acked-by: Pantelis Antoniou panto@antoniou-consulting.com
participants (3)
-
Haijun Zhang
-
Pantelis Antoniou
-
Zhang Haijun