summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLiangliang Lu <luliang@codeaurora.org>2016-12-03 10:34:26 +0800
committerSayali Lokhande <sayalil@codeaurora.org>2017-03-06 09:08:10 +0530
commit8ae07180f05a62867746eb27aa808913c23e7f73 (patch)
tree5c81225c2bd7090b85fdae10cbc30ed28abdbb20 /drivers
parent0022c06fc83f147d3563f7f65b13ff7576ca4048 (diff)
mmc: mmc-debugfs: add error state
This change adds support to allow user space query if low level eMMC driver has encountered any error or not, this state can be read/cleared via debugfs. CRs-Fixed: 1056483 Change-Id: Idc4ea375e9f308446dec04d443d062fe502658bd Signed-off-by: Liangliang Lu <luliang@codeaurora.org> Signed-off-by: Sayali Lokhande <sayalil@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/core/debugfs.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
index a0d31ded04db..594fba08e623 100644
--- a/drivers/mmc/core/debugfs.c
+++ b/drivers/mmc/core/debugfs.c
@@ -348,6 +348,33 @@ static int mmc_force_err_set(void *data, u64 val)
DEFINE_SIMPLE_ATTRIBUTE(mmc_force_err_fops, NULL, mmc_force_err_set, "%llu\n");
+static int mmc_err_state_get(void *data, u64 *val)
+{
+ struct mmc_host *host = data;
+
+ if (!host)
+ return -EINVAL;
+
+ *val = host->err_occurred ? 1 : 0;
+
+ return 0;
+}
+
+static int mmc_err_state_clear(void *data, u64 val)
+{
+ struct mmc_host *host = data;
+
+ if (!host)
+ return -EINVAL;
+
+ host->err_occurred = false;
+
+ return 0;
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(mmc_err_state, mmc_err_state_get,
+ mmc_err_state_clear, "%llu\n");
+
void mmc_add_host_debugfs(struct mmc_host *host)
{
struct dentry *root;
@@ -393,6 +420,10 @@ void mmc_add_host_debugfs(struct mmc_host *host)
root, host, &mmc_ring_buffer_fops))
goto err_node;
#endif
+ if (!debugfs_create_file("err_state", S_IRUSR | S_IWUSR, root, host,
+ &mmc_err_state))
+ goto err_node;
+
#ifdef CONFIG_MMC_CLKGATE
if (!debugfs_create_u32("clk_delay", (S_IRUSR | S_IWUSR),
root, &host->clk_delay))