From: Chuanxiao Dong <chuanxiao.dong@intel.com>
To: linux-mmc@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, cjb@laptop.org,
arjan@linux.intel.com, alan@linux.intel.com,
akpm@linux-foundation.org
Subject: [PATCH v4 1/4]enable HW reset capbility
Date: Wed, 1 Dec 2010 20:49:00 +0800 [thread overview]
Message-ID: <20101201124900.GB5421@intel.com> (raw)
>From d3be0b4fe8e8a40294830dfd8d0543d1e957fd29 Mon Sep 17 00:00:00 2001
From: Chuanxiao Dong <chuanxiao.dong@intel.com>
Date: Wed, 1 Dec 2010 19:14:02 +0800
Subject: [PATCH 1/4] enable HW reset caps of MMC card if card supports
HW reset capbility enable bit is byte 162 in card EXT_CSD
register, only version4.4 card or later can support to enable
this feature.
HW reset feature can be used to reset eMMC card when occures
timeout errors during read/write/erase.
Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com>
---
drivers/mmc/core/mmc.c | 29 +++++++++++++++++++++++++++++
include/linux/mmc/card.h | 1 +
include/linux/mmc/mmc.h | 1 +
3 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 77f93c3..85cc7f6 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -310,6 +310,10 @@ static int mmc_read_ext_csd(struct mmc_card *card)
ext_csd[EXT_CSD_SEC_FEATURE_SUPPORT];
card->ext_csd.trim_timeout = 300 *
ext_csd[EXT_CSD_TRIM_MULT];
+ /*
+ * check Hardware reset cap
+ */
+ card->ext_csd.rst = ext_csd[EXT_CSD_RST];
}
if (ext_csd[EXT_CSD_ERASED_MEM_CONT])
@@ -484,6 +488,31 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
}
/*
+ * eMMC4.4 version card has HW reset capbility.
+ * Enable this feature here:
+ * RST_N_FUNCTION register is W/R, one time programmable
+ * or readable.
+ * So need to enable this register only once after power on
+ */
+ if (card->csd.mmca_vsn >= CSD_SPEC_VER_4 &&
+ card->ext_csd.rev >= 4 &&
+ card->ext_csd.rst == 0) {
+ err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
+ EXT_CSD_RST, 1);
+
+ if (err && err != -EBADMSG)
+ goto free_card;
+
+ if (err) {
+ printk(KERN_WARNING "%s: switch to rst enable "
+ "failed %d\n",
+ mmc_hostname(card->host), err);
+ err = 0;
+ } else
+ card->ext_csd.rst = 1;
+ }
+
+ /*
* Activate high speed (if supported)
*/
if ((card->ext_csd.hs_max_dtr != 0) &&
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index 8ce0827..ebee676 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -54,6 +54,7 @@ struct mmc_ext_csd {
unsigned int sec_trim_mult; /* Secure trim multiplier */
unsigned int sec_erase_mult; /* Secure erase multiplier */
unsigned int trim_timeout; /* In milliseconds */
+ unsigned int rst; /* hardware reset enable bit */
};
struct sd_scr {
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index 956fbd8..b7ab0da 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -251,6 +251,7 @@ struct _mmc_csd {
* EXT_CSD fields
*/
+#define EXT_CSD_RST 162 /* onetime programmable R/W */
#define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */
#define EXT_CSD_ERASED_MEM_CONT 181 /* RO */
#define EXT_CSD_BUS_WIDTH 183 /* R/W */
--
1.6.6.1
next reply other threads:[~2010-12-01 12:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-01 12:49 Chuanxiao Dong [this message]
2010-12-09 5:24 ` [PATCH v4 1/4]enable HW reset capbility Kyungmin Park
2010-12-09 5:40 ` Dong, Chuanxiao
2010-12-09 6:05 ` Kyungmin Park
2010-12-09 6:10 ` Dong, Chuanxiao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101201124900.GB5421@intel.com \
--to=chuanxiao.dong@intel.com \
--cc=akpm@linux-foundation.org \
--cc=alan@linux.intel.com \
--cc=arjan@linux.intel.com \
--cc=cjb@laptop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.