Skip to contentSkip to conversation

mmc: enable BKOPS for supported eMMC(4.41)

PATCH In review Prasanna NAVARATNA 3 participants 8 messages Aug 30, 2013 – Sep 5, 2013 MMC, SD and SDIO

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mmc: enable BKOPS for supported eMMC(4.41)

Quoted 1 line

From d596be94f87b86ccb372a4ae55ee478951524895 Mon Sep 17 00:00:00 2001

From: Prasanna NAVARATNA <[email protected]>
Date: Fri, 30 Aug 2013 17:18:32 +0530
Subject: [PATCH] mmc: enable BKOPS for supported eMMC(4.41)

BKOPS feature is optional for eMMC 4.41. If an eMMC supports BKOPS and is of version 4.41 then BKOPS feature is ignored and not enabled.

Enable BKOPS for such eMMC. Also a capability is added to control the enabling of feature (only for eMMC 4.41, not valid for 4.5)

---
 drivers/mmc/core/mmc.c   |   18 ++++++++++++++++++
 include/linux/mmc/host.h |    1 +
 2 files changed, 19 insertions(+), 0 deletions(-)
drivers/mmc/core/mmc.c +18 -0
index 6d02012..fc44fd7 100644
@@ -1269,6 +1269,24 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
 	}
 
 	/*
+	 * Enable BKOPS feature (if supported and not enabled)
+	 */
+	if (!card->ext_csd.bkops_en && (host->caps2 & MMC_CAP2_BKOPS_EN) &&
+			(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
+		err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
+				EXT_CSD_BKOPS_EN, 1,
+				card->ext_csd.generic_cmd6_time);
+		if (err && err != -EBADMSG)
+			goto free_card;
+		if (err) {
+			pr_warning("%s: Enabling BKOPS failed\n",
+				   mmc_hostname(card->host));
+			err = 0;
+		} else
+			card->ext_csd.bkops_en = 1;
+	}
+
+	/*
 	 * Enable HPI feature (if supported)
 	 */
 	if (card->ext_csd.hpi) {
include/linux/mmc/host.h +1 -0
index 3b0c33a..2c79487 100644
@@ -281,6 +281,7 @@ struct mmc_host {
 				 MMC_CAP2_PACKED_WR)
 #define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14)	/* Don't power up before scan */
 #define MMC_CAP2_SANITIZE	(1 << 15)		/* Support Sanitize */
+#define MMC_CAP2_BKOPS_EN	(1 << 16)		/* Enable BKOPS */
 
 	mmc_pm_flag_t		pm_caps;	/* supported pm features */
 
Signature · 1 line
1.7.6
#1 lore raw

Hi, Prasanna.

Why do you use MMC_CAP2_BKOPS_EN?
Maybe we had discussed about this point. i know that we can enable the BKOPS with the mmc-util. (Actually, This code had included into my first patch. but it's removed.)

Best Regards,
Jaehoon Chung

Quoted 59 lines · Prasanna NAVARATNA
Quoted 1 line

From d596be94f87b86ccb372a4ae55ee478951524895 Mon Sep 17 00:00:00 2001

From: Prasanna NAVARATNA <[email protected]>
Date: Fri, 30 Aug 2013 17:18:32 +0530
Subject: [PATCH] mmc: enable BKOPS for supported eMMC(4.41)

BKOPS feature is optional for eMMC 4.41. If an eMMC supports BKOPS and is of version 4.41 then BKOPS feature is ignored and not enabled.

Enable BKOPS for such eMMC. Also a capability is added to control the enabling of feature (only for eMMC 4.41, not valid for 4.5)

---
 drivers/mmc/core/mmc.c   |   18 ++++++++++++++++++
 include/linux/mmc/host.h |    1 +
 2 files changed, 19 insertions(+), 0 deletions(-)
drivers/mmc/core/mmc.c +18 -0
index 6d02012..fc44fd7 100644
@@ -1269,6 +1269,24 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
 	}
 
 	/*
+	 * Enable BKOPS feature (if supported and not enabled)
+	 */
+	if (!card->ext_csd.bkops_en && (host->caps2 & MMC_CAP2_BKOPS_EN) &&
+			(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
+		err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
+				EXT_CSD_BKOPS_EN, 1,
+				card->ext_csd.generic_cmd6_time);
+		if (err && err != -EBADMSG)
+			goto free_card;
+		if (err) {
+			pr_warning("%s: Enabling BKOPS failed\n",
+				   mmc_hostname(card->host));
+			err = 0;
+		} else
+			card->ext_csd.bkops_en = 1;
+	}
+
+	/*
 	 * Enable HPI feature (if supported)
 	 */
 	if (card->ext_csd.hpi) {
include/linux/mmc/host.h +1 -0
index 3b0c33a..2c79487 100644
@@ -281,6 +281,7 @@ struct mmc_host {
 				 MMC_CAP2_PACKED_WR)
 #define MMC_CAP2_NO_PRESCAN_POWERUP (1 << 14)	/* Don't power up before scan */
 #define MMC_CAP2_SANITIZE	(1 << 15)		/* Support Sanitize */
+#define MMC_CAP2_BKOPS_EN	(1 << 16)		/* Enable BKOPS */
 
 	mmc_pm_flag_t		pm_caps;	/* supported pm features */
 
#2 lore raw

Hello Jaehoon,

Quoted 1 line

Why do you use MMC_CAP2_BKOPS_EN?

Because BKOPS on eMMC4.41 is optional. So the capability is provided for the platform to either enable/disable this feature (its not mandatory to always enable BKOPS on 4.41)

Quoted 1 line

Maybe we had discussed about this point. i know that we can enable the

BKOPS with the mmc-util.

Quoted 1 line

(Actually, This code had included into my first patch. but it's removed.)

I'm not aware of this discussion and currently I'm running on eMMC4.41 and bkops is supported but not enabled. So i suggested this patch. Do you mean to say, right now, i can enable it using mmc-utils? Will you please elaborate?

Thanks,
Prasanna

#3 lore raw

Hi Prasanna,

MMC-Utils open source utility for enabling and disabling features. It use ioctl defined in block/card to send commands to host.
git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git

Thanks,
Nitin

Quoted 22 lines · Prasanna NAVARATNA

Hello Jaehoon,

Quoted 1 line

Why do you use MMC_CAP2_BKOPS_EN?

Because BKOPS on eMMC4.41 is optional. So the capability is provided for the platform to either enable/disable this feature (its not mandatory to always enable BKOPS on 4.41)

Quoted 1 line

Maybe we had discussed about this point. i know that we can enable the

BKOPS with the mmc-util.

Quoted 1 line

(Actually, This code had included into my first patch. but it's removed.)

I'm not aware of this discussion and currently I'm running on eMMC4.41 and bkops is supported but not enabled. So i suggested this patch. Do you mean to say, right now, i can enable it using mmc-utils? Will you please elaborate?

Thanks,
Prasanna

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#4 lore raw

Hi Prasanna,

You can refer to

http://permalink.gmane.org/gmane.linux.kernel.mmc/15430

Best Regards,
Jaehoon Chung

Quoted 38 lines · Nitin Singla

Hi Prasanna,

MMC-Utils open source utility for enabling and disabling features. It use ioctl defined in block/card to send commands to host.
git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git

Thanks,
Nitin

Quoted 15 lines · Prasanna NAVARATNA

Hello Jaehoon,

Quoted 1 line

Why do you use MMC_CAP2_BKOPS_EN?

Because BKOPS on eMMC4.41 is optional. So the capability is provided for the platform to either enable/disable this feature (its not mandatory to always enable BKOPS on 4.41)

Quoted 1 line

Maybe we had discussed about this point. i know that we can enable the

BKOPS with the mmc-util.

Quoted 1 line

(Actually, This code had included into my first patch. but it's removed.)

I'm not aware of this discussion and currently I'm running on eMMC4.41 and bkops is supported but not enabled. So i suggested this patch. Do you mean to say, right now, i can enable it using mmc-utils? Will you please elaborate?

Quoted 7 lines

Thanks,
Prasanna

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#5 lore raw

Hello,

Quoted 1 line

http://permalink.gmane.org/gmane.linux.kernel.mmc/15430

This link mentions that BKOPS_EN 163bit in EXT_CSD is one-time programmable flag but from JEDEC Standard No. 84-A441 spec, it is R/W bit. Please re-confirm about the statement.

Quoted 3 lines
Quoted 3 lines

MMC-Utils open source utility for enabling and disabling features. It use ioctl defined in block/card to send commands to host.
git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git

I am not able to find this git in my platform repo.
Is this mmc-utils git mandatory to have?
What if, somebody don't have it and need to enabled BKOPS for eMMMC4.41? Is mmc-utils the only way to enable BKOPS?

Regards,
Prasanna NAVARATNA

#6 lore raw
Quoted 6 lines · Prasanna NAVARATNA

Hello,

Quoted 1 line

http://permalink.gmane.org/gmane.linux.kernel.mmc/15430

This link mentions that BKOPS_EN 163bit in EXT_CSD is one-time programmable flag but from JEDEC Standard No. 84-A441 spec, it is R/W bit. Please re-confirm about the statement.

R/W bit is one-time programmable and readable. what do you mean?

Quoted 10 lines
Quoted 5 lines
Quoted 5 lines

MMC-Utils open source utility for enabling and disabling features. It use ioctl defined in block/card to send commands to host.
git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc-utils.git

I am not able to find this git in my platform repo.
Is this mmc-utils git mandatory to have?
What if, somebody don't have it and need to enabled BKOPS for eMMMC4.41? Is mmc-utils the only way to enable BKOPS?

If you want to enable the bkops, then you can use your patch at your local repo, not mainline.

Best Regards,
Jaehoon Chung

Quoted 9 lines

Regards,
Prasanna NAVARATNA

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#7 lore raw

Hello Jaehoon,

Quoted 1 line

R/W bit is one-time programmable and readable. what do you mean?

Yes, right. Sorry, I was confused with word one-time programmable as W bit.

Quoted 1 line

If you want to enable the bkops, then you can use your patch at your local

repo, not mainline.
OK. Thanks for the information.

Regards,
Prasanna NAVARATNA