Skip to contentSkip to conversation

mmc: support the revision check for eMMC4.5

PATCH New Jaehoon Chung 3 participants 4 messages Mar 27, 2012 – Sep 3, 2012 MMC, SD and SDIO

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mmc: support the revision check for eMMC4.5

eMMC card is introduced the eMMC4.5.
But now eMMC card is checked up to eMMC4.0. This patch is supported until eMMC4.5

---
 common/cmd_mmc.c  |    5 ++++-
 drivers/mmc/mmc.c |   25 +++++++++++++++++++++++++
 include/mmc.h     |    8 ++++++++
 3 files changed, 37 insertions(+), 1 deletions(-)
common/cmd_mmc.c +4 -1
index 8f13c22..ff150ca 100644
@@ -106,7 +106,10 @@ static void print_mmcinfo(struct mmc *mmc)
 	printf("Rd Block Len: %d\n", mmc->read_bl_len);
 
 	printf("%s version %d.%d\n", IS_SD(mmc) ? "SD" : "MMC",
-			(mmc->version >> 4) & 0xf, mmc->version & 0xf);
+			(mmc->version >> 4) & 0xf,
+			(mmc->version & 0xf) == EXT_CSD_REV_1_5 ?
+			41 :((mmc->version & 0xf) > EXT_CSD_REV_1_5 ?
+			(mmc->version & 0xf) - 1 : (mmc->version & 0xf)));
 
 	printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No");
 	puts("Capacity: ");
drivers/mmc/mmc.c +25 -0
index 49c3349..e035012 100644
@@ -651,6 +651,31 @@ int mmc_change_freq(struct mmc *mmc)
 	if (err)
 		return err;
 
+	switch (ext_csd[EXT_CSD_REV]) {
+	case EXT_CSD_REV_1_0:
+		mmc->version |= EXT_CSD_REV_1_0;
+		break;
+	case EXT_CSD_REV_1_1:
+		mmc->version |= EXT_CSD_REV_1_1;
+		break;
+	case EXT_CSD_REV_1_2:
+		mmc->version |= EXT_CSD_REV_1_2;
+		break;
+	case EXT_CSD_REV_1_3:
+		mmc->version |= EXT_CSD_REV_1_3;
+		break;
+	case EXT_CSD_REV_1_5:
+		mmc->version |= EXT_CSD_REV_1_5;
+		break;
+	case EXT_CSD_REV_1_6:
+		mmc->version |= EXT_CSD_REV_1_6;
+		break;
+	case EXT_CSD_REV_1_4:
+	default:
+		printf("Unknown revision - %x\n", ext_csd[EXT_CSD_REV]);
+		return 0;
+	}
+
 	/* No high-speed support */
 	if (!ext_csd[EXT_CSD_HS_TIMING])
 		return 0;
include/mmc.h +8 -0
index 30c2375..726da99 100644
@@ -157,6 +157,14 @@
 #define EXT_CSD_SEC_CNT			212	/* RO, 4 bytes */
 #define EXT_CSD_HC_ERASE_GRP_SIZE	224	/* RO */
 
+#define EXT_CSD_REV_1_0			0
+#define EXT_CSD_REV_1_1			1
+#define EXT_CSD_REV_1_2			2
+#define EXT_CSD_REV_1_3			3
+#define EXT_CSD_REV_1_4			4
+#define EXT_CSD_REV_1_5			5
+#define EXT_CSD_REV_1_6			6
+
 /*
  * EXT_CSD field definitions
  */
Signature · 1 line
1.7.4.1
#1 lore raw

PATCH 1/1 mmc: support the revision check for eMMC4.5

Hi,

Anybody think about this patch?
mmcinfo is produce correctly?

if i miss something, let me know, plz.

Best Regards,
Jaehoon Chung

2012/3/27 Jaehoon Chung <[email protected]>:

Quoted 89 lines

eMMC card is introduced the eMMC4.5.
But now eMMC card is checked up to eMMC4.0. This patch is supported until eMMC4.5

---

?common/cmd_mmc.c ?| ? ?5 ++++-
?drivers/mmc/mmc.c | ? 25 +++++++++++++++++++++++++
?include/mmc.h ? ? | ? ?8 ++++++++

?3 files changed, 37 insertions(+), 1 deletions(-)

common/cmd_mmc.c +4 -1
index 8f13c22..ff150ca 100644
@@ -106,7 +106,10 @@ static void print_mmcinfo(struct mmc *mmc)
 ? ? ? ?printf("Rd Block Len: %d\n", mmc->read_bl_len);
 
 ? ? ? ?printf("%s version %d.%d\n", IS_SD(mmc) ? "SD" : "MMC",
- ? ? ? ? ? ? ? ? ? ? ? (mmc->version >> 4) & 0xf, mmc->version & 0xf);
+ ? ? ? ? ? ? ? ? ? ? ? (mmc->version >> 4) & 0xf,
+ ? ? ? ? ? ? ? ? ? ? ? (mmc->version & 0xf) == EXT_CSD_REV_1_5 ?
+ ? ? ? ? ? ? ? ? ? ? ? 41 :((mmc->version & 0xf) > EXT_CSD_REV_1_5 ?
+ ? ? ? ? ? ? ? ? ? ? ? (mmc->version & 0xf) - 1 : (mmc->version & 0xf)));
 
 ? ? ? ?printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No");
 ? ? ? ?puts("Capacity: ");
drivers/mmc/mmc.c +25 -0
index 49c3349..e035012 100644
@@ -651,6 +651,31 @@ int mmc_change_freq(struct mmc *mmc)
 ? ? ? ?if (err)
 ? ? ? ? ? ? ? ?return err;
 
+ ? ? ? switch (ext_csd[EXT_CSD_REV]) {
+ ? ? ? case EXT_CSD_REV_1_0:
+ ? ? ? ? ? ? ? mmc->version |= EXT_CSD_REV_1_0;
+ ? ? ? ? ? ? ? break;
+ ? ? ? case EXT_CSD_REV_1_1:
+ ? ? ? ? ? ? ? mmc->version |= EXT_CSD_REV_1_1;
+ ? ? ? ? ? ? ? break;
+ ? ? ? case EXT_CSD_REV_1_2:
+ ? ? ? ? ? ? ? mmc->version |= EXT_CSD_REV_1_2;
+ ? ? ? ? ? ? ? break;
+ ? ? ? case EXT_CSD_REV_1_3:
+ ? ? ? ? ? ? ? mmc->version |= EXT_CSD_REV_1_3;
+ ? ? ? ? ? ? ? break;
+ ? ? ? case EXT_CSD_REV_1_5:
+ ? ? ? ? ? ? ? mmc->version |= EXT_CSD_REV_1_5;
+ ? ? ? ? ? ? ? break;
+ ? ? ? case EXT_CSD_REV_1_6:
+ ? ? ? ? ? ? ? mmc->version |= EXT_CSD_REV_1_6;
+ ? ? ? ? ? ? ? break;
+ ? ? ? case EXT_CSD_REV_1_4:
+ ? ? ? default:
+ ? ? ? ? ? ? ? printf("Unknown revision - %x\n", ext_csd[EXT_CSD_REV]);
+ ? ? ? ? ? ? ? return 0;
+ ? ? ? }
+

? ? ? ?/* No high-speed support */
? ? ? ?if (!ext_csd[EXT_CSD_HS_TIMING])
? ? ? ? ? ? ? ?return 0;

include/mmc.h +0 -0
index 30c2375..726da99 100644
@@ -157,6 +157,14 @@

?#define EXT_CSD_SEC_CNT ? ? ? ? ? ? ? ? ? ? ? ?212 ? ? /* RO, 4 bytes */ ?#define EXT_CSD_HC_ERASE_GRP_SIZE ? ? ?224 ? ? /* RO */

include/mmc.h +8 -0
+#define EXT_CSD_REV_1_0 ? ? ? ? ? ? ? ? ? ? ? ?0
+#define EXT_CSD_REV_1_1 ? ? ? ? ? ? ? ? ? ? ? ?1
+#define EXT_CSD_REV_1_2 ? ? ? ? ? ? ? ? ? ? ? ?2
+#define EXT_CSD_REV_1_3 ? ? ? ? ? ? ? ? ? ? ? ?3
+#define EXT_CSD_REV_1_4 ? ? ? ? ? ? ? ? ? ? ? ?4
+#define EXT_CSD_REV_1_5 ? ? ? ? ? ? ? ? ? ? ? ?5
+#define EXT_CSD_REV_1_6 ? ? ? ? ? ? ? ? ? ? ? ?6
+

?/*
?* EXT_CSD field definitions
?*/
--
1.7.4.1
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#2 lore raw

PATCH 1/1 mmc: support the revision check for eMMC4.5

Dear Jae hoon Chung,

Quoted 6 lines

Hi,

Anybody think about this patch?
mmcinfo is produce correctly?

if i miss something, let me know, plz.

Andy?

Quoted 99 lines

Best Regards,
Jaehoon Chung

2012/3/27 Jaehoon Chung <[email protected]>:

Quoted 85 lines

eMMC card is introduced the eMMC4.5.
But now eMMC card is checked up to eMMC4.0. This patch is supported until eMMC4.5

---
 common/cmd_mmc.c  |    5 ++++-
 drivers/mmc/mmc.c |   25 +++++++++++++++++++++++++
 include/mmc.h     |    8 ++++++++
 3 files changed, 37 insertions(+), 1 deletions(-)
common/cmd_mmc.c +4 -1
index 8f13c22..ff150ca 100644
@@ -106,7 +106,10 @@ static void print_mmcinfo(struct mmc *mmc)
       printf("Rd Block Len: %d\n", mmc->read_bl_len);
 
       printf("%s version %d.%d\n", IS_SD(mmc) ? "SD" : "MMC",
-                       (mmc->version >> 4) & 0xf, mmc->version & 0xf);
+                       (mmc->version >> 4) & 0xf,
+                       (mmc->version & 0xf) == EXT_CSD_REV_1_5 ?
+                       41 :((mmc->version & 0xf) > EXT_CSD_REV_1_5 ?
+                       (mmc->version & 0xf) - 1 : (mmc->version &
 0xf)));
 
       printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No");
       puts("Capacity: ");
drivers/mmc/mmc.c +25 -0
index 49c3349..e035012 100644
@@ -651,6 +651,31 @@ int mmc_change_freq(struct mmc *mmc)
       if (err)
               return err;
 
+       switch (ext_csd[EXT_CSD_REV]) {
+       case EXT_CSD_REV_1_0:
+               mmc->version |= EXT_CSD_REV_1_0;
+               break;
+       case EXT_CSD_REV_1_1:
+               mmc->version |= EXT_CSD_REV_1_1;
+               break;
+       case EXT_CSD_REV_1_2:
+               mmc->version |= EXT_CSD_REV_1_2;
+               break;
+       case EXT_CSD_REV_1_3:
+               mmc->version |= EXT_CSD_REV_1_3;
+               break;
+       case EXT_CSD_REV_1_5:
+               mmc->version |= EXT_CSD_REV_1_5;
+               break;
+       case EXT_CSD_REV_1_6:
+               mmc->version |= EXT_CSD_REV_1_6;
+               break;
+       case EXT_CSD_REV_1_4:
+       default:
+               printf("Unknown revision - %x\n", ext_csd[EXT_CSD_REV]);
+               return 0;
+       }
+
       /* No high-speed support */
       if (!ext_csd[EXT_CSD_HS_TIMING])
               return 0;
include/mmc.h +8 -1
index 30c2375..726da99 100644
@@ -157,6 +157,14 @@
 #define EXT_CSD_SEC_CNT                        212     /* RO, 4 bytes */
 #define EXT_CSD_HC_ERASE_GRP_SIZE      224     /* RO */
 
+#define EXT_CSD_REV_1_0                        0
+#define EXT_CSD_REV_1_1                        1
+#define EXT_CSD_REV_1_2                        2
+#define EXT_CSD_REV_1_3                        3
+#define EXT_CSD_REV_1_4                        4
+#define EXT_CSD_REV_1_5                        5
+#define EXT_CSD_REV_1_6                        6
+
 /*
 * EXT_CSD field definitions
 */
--
Quoted 5 lines

1.7.4.1
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#3 lore raw

PATCH 1/1 mmc: support the revision check for eMMC4.5

Hi Marek,

I will resend this patch with Andy's comment.
If you have any other opinion, let me know plz.

Best Regards,
Jaehoon Chung

Quoted 111 lines · Marek Vasut

Dear Jae hoon Chung,

Quoted 6 lines

Hi,

Anybody think about this patch?
mmcinfo is produce correctly?

if i miss something, let me know, plz.

Andy?

Quoted 99 lines

Best Regards,
Jaehoon Chung

2012/3/27 Jaehoon Chung <[email protected]>:

Quoted 85 lines

eMMC card is introduced the eMMC4.5.
But now eMMC card is checked up to eMMC4.0. This patch is supported until eMMC4.5

---
 common/cmd_mmc.c  |    5 ++++-
 drivers/mmc/mmc.c |   25 +++++++++++++++++++++++++
 include/mmc.h     |    8 ++++++++
 3 files changed, 37 insertions(+), 1 deletions(-)
common/cmd_mmc.c +4 -1
index 8f13c22..ff150ca 100644
@@ -106,7 +106,10 @@ static void print_mmcinfo(struct mmc *mmc)
       printf("Rd Block Len: %d\n", mmc->read_bl_len);
 
       printf("%s version %d.%d\n", IS_SD(mmc) ? "SD" : "MMC",
-                       (mmc->version >> 4) & 0xf, mmc->version & 0xf);
+                       (mmc->version >> 4) & 0xf,
+                       (mmc->version & 0xf) == EXT_CSD_REV_1_5 ?
+                       41 :((mmc->version & 0xf) > EXT_CSD_REV_1_5 ?
+                       (mmc->version & 0xf) - 1 : (mmc->version &
 0xf)));
 
       printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No");
       puts("Capacity: ");
drivers/mmc/mmc.c +25 -0
index 49c3349..e035012 100644
@@ -651,6 +651,31 @@ int mmc_change_freq(struct mmc *mmc)
       if (err)
               return err;
 
+       switch (ext_csd[EXT_CSD_REV]) {
+       case EXT_CSD_REV_1_0:
+               mmc->version |= EXT_CSD_REV_1_0;
+               break;
+       case EXT_CSD_REV_1_1:
+               mmc->version |= EXT_CSD_REV_1_1;
+               break;
+       case EXT_CSD_REV_1_2:
+               mmc->version |= EXT_CSD_REV_1_2;
+               break;
+       case EXT_CSD_REV_1_3:
+               mmc->version |= EXT_CSD_REV_1_3;
+               break;
+       case EXT_CSD_REV_1_5:
+               mmc->version |= EXT_CSD_REV_1_5;
+               break;
+       case EXT_CSD_REV_1_6:
+               mmc->version |= EXT_CSD_REV_1_6;
+               break;
+       case EXT_CSD_REV_1_4:
+       default:
+               printf("Unknown revision - %x\n", ext_csd[EXT_CSD_REV]);
+               return 0;
+       }
+
       /* No high-speed support */
       if (!ext_csd[EXT_CSD_HS_TIMING])
               return 0;
include/mmc.h +8 -1
index 30c2375..726da99 100644
@@ -157,6 +157,14 @@
 #define EXT_CSD_SEC_CNT                        212     /* RO, 4 bytes */
 #define EXT_CSD_HC_ERASE_GRP_SIZE      224     /* RO */
 
+#define EXT_CSD_REV_1_0                        0
+#define EXT_CSD_REV_1_1                        1
+#define EXT_CSD_REV_1_2                        2
+#define EXT_CSD_REV_1_3                        3
+#define EXT_CSD_REV_1_4                        4
+#define EXT_CSD_REV_1_5                        5
+#define EXT_CSD_REV_1_6                        6
+
 /*
 * EXT_CSD field definitions
 */
--
Quoted 5 lines

1.7.4.1
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot