* [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card
@ 2022-05-25 12:28 Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 1/4] mmc: core: Capture eMMC and SD card errors Shaik Sajida Bhanu
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Shaik Sajida Bhanu @ 2022-05-25 12:28 UTC (permalink / raw)
To: adrian.hunter, ulf.hansson, agross, bjorn.andersson, p.zabel,
chris, venkatg, gdjakov, quic_asutoshd
Cc: linux-arm-msm, linux-mmc, linux-kernel, quic_rampraka,
quic_pragalla, quic_sartgarg, quic_nitirawa, quic_sayalil,
Shaik Sajida Bhanu
Changes since V6:
- Rebased on Ulf's(Ulf Hansson) next branch as suggested by
Adrain Hunter.
- Replaced debugfs_create_file() with debugfs_create_file_unsafe()
as suggested by Adrain Hunter.
- "[V6,5/5] mmc: cqhci: Capture eMMC and SD card errors" not included
in this Patch series as we don't have cqhci changes on Ulf's(Ulf Hansson)
next branch.
Changes since V5:
- Considered all error stats enums to set error state.
- Added missed tuning error related code changes which was
missed in patch set V5 as Adrain Hunter pointed.
- Replaced DEFINE_SIMPLE_ATTRIBUTE with DEFINE_DEBUGFS_ATTRIBUTE
as suggested by Adrain Hunter.
Changes since V4:
- Defined new macro to increment err_stats members when error occurred
as suggested by Adrain Hunter.
- Called err_stats members increment function after printing the error
as suggested by Adrain Hunter.
- Considered INDEX and END_BIT errors same as CRC errors as suggested
by Adrain Hunter.
- Removed Null check for host in debug fs functions and Reordered
err_stats declarationas suggested by Adrain Hunter.
- Removed err_state variable stuff and updated err_state debug fs entry
based on the err_stats members state as suggested by Adrain Hunter.
Changes since V3:
- Dropped error stats feature flag as suggested by Adrain Hunter.
- Separated error state related changes in separate patches as
suggested by Adrain Hunter.
[PATCH V4 4/7] : error state debug fs
[PATCH V4 5/7] : error state enable function
[PATCH V4 6/7] : error state enable in error case
- Note: we are enabling error state before calling sdhci_dumpregs
we couldn't add the err state in error stats array as err state
is not error type.
- Corrected Signed-off-by order as suggested by Bjron Andersson.
- Moved error state enable code from sdhci_dumpregs to error
conditions as suggested by Adrain Hunter
Changes since V2:
- Removed userspace error stats clear debug fs entry as suggested
by Adrain Hunter.
- Split patch into 4 patches
[PATCH V3 1/4] : sdhci driver
[PATCH V3 2/4] : debug fs entries
[PATCH V3 3/4] : core driver
[PATCH V3 4/4] : cqhci driver
- Used for loop to print error messages instead of using printf
statements for all error messages as suggested by Adrain Hunter.
- Introduced one flag to enable error stats feature, if any other
client wants to use this feature, they need to enable that flag.
- Moved reset command timeout error statement to card init flow
as suggested by Adrain Hunter.
Changes since V1:
- Removed sysfs entry for eMMC and SD card error statistics and added
debugfs entry as suggested by Adrian Hunter and Ulf Hansson.
Shaik Sajida Bhanu (4):
mmc: core: Capture eMMC and SD card errors
mmc: sdhci: Capture eMMC and SD card errors
mmc: debugfs: Add debug fs entry for mmc driver
mmc: debugfs: Add debug fs error state entry for mmc driver
drivers/mmc/core/core.c | 11 +++++--
drivers/mmc/core/debugfs.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++
drivers/mmc/host/sdhci.c | 33 +++++++++++++++----
drivers/mmc/host/sdhci.h | 3 ++
include/linux/mmc/host.h | 26 +++++++++++++++
include/linux/mmc/mmc.h | 6 ++++
6 files changed, 151 insertions(+), 9 deletions(-)
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V7 1/4] mmc: core: Capture eMMC and SD card errors
2022-05-25 12:28 [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Shaik Sajida Bhanu
@ 2022-05-25 12:28 ` Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 2/4] mmc: sdhci: " Shaik Sajida Bhanu
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Shaik Sajida Bhanu @ 2022-05-25 12:28 UTC (permalink / raw)
To: adrian.hunter, ulf.hansson, agross, bjorn.andersson, p.zabel,
chris, venkatg, gdjakov, quic_asutoshd
Cc: linux-arm-msm, linux-mmc, linux-kernel, quic_rampraka,
quic_pragalla, quic_sartgarg, quic_nitirawa, quic_sayalil,
Shaik Sajida Bhanu, Liangliang Lu, Bao D . Nguyen
Add changes to capture eMMC and SD card errors.
This is useful for debug and testing.
Signed-off-by: Liangliang Lu <quic_luliang@quicinc.com>
Signed-off-by: Sayali Lokhande <quic_sayalil@quicinc.com>
Signed-off-by: Bao D. Nguyen <quic_nguyenb@quicinc.com>
Signed-off-by: Ram Prakash Gupta <quic_rampraka@quicinc.com>
Signed-off-by: Shaik Sajida Bhanu <quic_c_sbhanu@quicinc.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
---
drivers/mmc/core/core.c | 11 +++++++++--
include/linux/mmc/host.h | 26 ++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 2553d90..ede7887 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -1171,10 +1171,11 @@ int mmc_execute_tuning(struct mmc_card *card)
err = host->ops->execute_tuning(host, opcode);
- if (err)
+ if (err) {
pr_err("%s: tuning execution failed: %d\n",
mmc_hostname(host), err);
- else
+ mmc_debugfs_err_stats_inc(host, MMC_ERR_TUNING);
+ } else
mmc_retune_enable(host);
return err;
@@ -2811,6 +2812,12 @@ void mmc_rescan(struct work_struct *work)
if (freqs[i] <= host->f_min)
break;
}
+
+ /*
+ * Ignore the command timeout errors observed during
+ * the card init as those are excepted.
+ */
+ host->err_stats[MMC_ERR_CMD_TIMEOUT] = 0;
mmc_release_host(host);
out:
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index 0b24394..ceb353b 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -82,6 +82,25 @@ struct mmc_ios {
bool enhanced_strobe; /* hs400es selection */
};
+enum mmc_err_stat {
+ MMC_ERR_CMD_TIMEOUT,
+ MMC_ERR_CMD_CRC,
+ MMC_ERR_DAT_TIMEOUT,
+ MMC_ERR_DAT_CRC,
+ MMC_ERR_AUTO_CMD,
+ MMC_ERR_ADMA,
+ MMC_ERR_TUNING,
+ MMC_ERR_CMDQ_RED,
+ MMC_ERR_CMDQ_GCE,
+ MMC_ERR_CMDQ_ICCE,
+ MMC_ERR_REQ_TIMEOUT,
+ MMC_ERR_CMDQ_REQ_TIMEOUT,
+ MMC_ERR_ICE_CFG,
+ MMC_ERR_CTRL_TIMEOUT,
+ MMC_ERR_UNEXPECTED_IRQ,
+ MMC_ERR_MAX,
+};
+
struct mmc_host_ops {
/*
* It is optional for the host to implement pre_req and post_req in
@@ -397,6 +416,7 @@ struct mmc_host {
int dsr_req; /* DSR value is valid */
u32 dsr; /* optional driver stage (DSR) value */
+ u32 err_stats[MMC_ERR_MAX];
unsigned long private[0] ____cacheline_aligned;
};
@@ -546,6 +566,12 @@ static inline void mmc_retune_recheck(struct mmc_host *host)
host->retune_now = 1;
}
+static inline void mmc_debugfs_err_stats_inc(struct mmc_host *host,
+ enum mmc_err_stat stat)
+{
+ host->err_stats[stat] += 1;
+}
+
void mmc_retune_pause(struct mmc_host *host);
void mmc_retune_unpause(struct mmc_host *host);
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V7 2/4] mmc: sdhci: Capture eMMC and SD card errors
2022-05-25 12:28 [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 1/4] mmc: core: Capture eMMC and SD card errors Shaik Sajida Bhanu
@ 2022-05-25 12:28 ` Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 3/4] mmc: debugfs: Add debug fs entry for mmc driver Shaik Sajida Bhanu
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Shaik Sajida Bhanu @ 2022-05-25 12:28 UTC (permalink / raw)
To: adrian.hunter, ulf.hansson, agross, bjorn.andersson, p.zabel,
chris, venkatg, gdjakov, quic_asutoshd
Cc: linux-arm-msm, linux-mmc, linux-kernel, quic_rampraka,
quic_pragalla, quic_sartgarg, quic_nitirawa, quic_sayalil,
Shaik Sajida Bhanu, Liangliang Lu, Bao D . Nguyen
Add changes to capture eMMC and SD card errors.
This is useful for debug and testing.
Signed-off-by: Liangliang Lu <quic_luliang@quicinc.com>
Signed-off-by: Sayali Lokhande <quic_sayalil@quicinc.com>
Signed-off-by: Bao D. Nguyen <quic_nguyenb@quicinc.com>
Signed-off-by: Shaik Sajida Bhanu <quic_c_sbhanu@quicinc.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
---
drivers/mmc/host/sdhci.c | 33 ++++++++++++++++++++++++++-------
drivers/mmc/host/sdhci.h | 3 +++
include/linux/mmc/mmc.h | 6 ++++++
3 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 4805566..95c1b39 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -183,6 +183,7 @@ void sdhci_reset(struct sdhci_host *host, u8 mask)
if (timeout == 0) {
pr_err("%s: Reset 0x%x never completed.\n",
mmc_hostname(host->mmc), (int)mask);
+ sdhci_err_stats_inc(host, CTRL_TIMEOUT);
sdhci_dumpregs(host);
return;
}
@@ -1093,6 +1094,7 @@ void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
if (timeout == 0) {
pr_err("%s: Controller never released inhibit bit(s).\n",
mmc_hostname(host->mmc));
+ sdhci_err_stats_inc(host, CTRL_TIMEOUT);
sdhci_dumpregs(host);
cmd->error = -EIO;
sdhci_finish_mrq(host, cmd->mrq);
@@ -1363,6 +1365,7 @@ void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
if (timeout == 0) {
pr_err("%s: Internal clock never stabilised.\n",
mmc_hostname(host->mmc));
+ sdhci_err_stats_inc(host, CTRL_TIMEOUT);
sdhci_dumpregs(host);
return;
}
@@ -2362,6 +2365,7 @@ static void sdhci_timeout_timer(unsigned long data)
if (host->cmd && !sdhci_data_line_cmd(host->cmd)) {
pr_err("%s: Timeout waiting for hardware cmd interrupt.\n",
mmc_hostname(host->mmc));
+ sdhci_err_stats_inc(host, REQ_TIMEOUT);
sdhci_dumpregs(host);
host->cmd->error = -ETIMEDOUT;
@@ -2385,6 +2389,7 @@ static void sdhci_timeout_data_timer(unsigned long data)
(host->cmd && sdhci_data_line_cmd(host->cmd))) {
pr_err("%s: Timeout waiting for hardware interrupt.\n",
mmc_hostname(host->mmc));
+ sdhci_err_stats_inc(host, REQ_TIMEOUT);
sdhci_dumpregs(host);
if (host->data) {
@@ -2421,16 +2426,21 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask, u32 *mask)
return;
pr_err("%s: Got command interrupt 0x%08x even though no command operation was in progress.\n",
mmc_hostname(host->mmc), (unsigned)intmask);
+ sdhci_err_stats_inc(host, UNEXPECTED_IRQ);
sdhci_dumpregs(host);
return;
}
if (intmask & (SDHCI_INT_TIMEOUT | SDHCI_INT_CRC |
SDHCI_INT_END_BIT | SDHCI_INT_INDEX)) {
- if (intmask & SDHCI_INT_TIMEOUT)
+ if (intmask & SDHCI_INT_TIMEOUT) {
host->cmd->error = -ETIMEDOUT;
- else
+ sdhci_err_stats_inc(host, CMD_TIMEOUT);
+ } else {
host->cmd->error = -EILSEQ;
+ if (!mmc_op_tuning(host->cmd->opcode))
+ sdhci_err_stats_inc(host, CMD_CRC);
+ }
/*
* If this command initiates a data phase and a response
@@ -2524,6 +2534,7 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
if (data_cmd && (data_cmd->flags & MMC_RSP_BUSY)) {
if (intmask & SDHCI_INT_DATA_TIMEOUT) {
data_cmd->error = -ETIMEDOUT;
+ sdhci_err_stats_inc(host, CMD_TIMEOUT);
sdhci_finish_mrq(host, data_cmd->mrq);
return;
}
@@ -2551,22 +2562,29 @@ static void sdhci_data_irq(struct sdhci_host *host, u32 intmask)
pr_err("%s: Got data interrupt 0x%08x even though no data operation was in progress.\n",
mmc_hostname(host->mmc), (unsigned)intmask);
+ sdhci_err_stats_inc(host, UNEXPECTED_IRQ);
sdhci_dumpregs(host);
return;
}
- if (intmask & SDHCI_INT_DATA_TIMEOUT)
+ if (intmask & SDHCI_INT_DATA_TIMEOUT) {
host->data->error = -ETIMEDOUT;
- else if (intmask & SDHCI_INT_DATA_END_BIT)
+ sdhci_err_stats_inc(host, DAT_TIMEOUT);
+ } else if (intmask & SDHCI_INT_DATA_END_BIT) {
host->data->error = -EILSEQ;
- else if ((intmask & SDHCI_INT_DATA_CRC) &&
+ if (!mmc_op_tuning(SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND))))
+ sdhci_err_stats_inc(host, DAT_CRC);
+ } else if ((intmask & SDHCI_INT_DATA_CRC) &&
SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND))
- != MMC_BUS_TEST_R)
+ != MMC_BUS_TEST_R) {
host->data->error = -EILSEQ;
- else if (intmask & SDHCI_INT_ADMA_ERROR) {
+ if (!mmc_op_tuning(SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND))))
+ sdhci_err_stats_inc(host, DAT_CRC);
+ } else if (intmask & SDHCI_INT_ADMA_ERROR) {
pr_err("%s: ADMA error\n", mmc_hostname(host->mmc));
sdhci_adma_show_error(host);
+ sdhci_err_stats_inc(host, ADMA);
host->data->error = -EIO;
if (host->ops->adma_workaround)
host->ops->adma_workaround(host, intmask);
@@ -2720,6 +2738,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id)
if (unexpected) {
pr_err("%s: Unexpected interrupt 0x%08x.\n",
mmc_hostname(host->mmc), unexpected);
+ sdhci_err_stats_inc(host, UNEXPECTED_IRQ);
sdhci_dumpregs(host);
}
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index c722cd2..492a350 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -321,6 +321,9 @@ struct sdhci_adma2_64_desc {
/* Allow for a a command request and a data request at the same time */
#define SDHCI_MAX_MRQS 2
+#define sdhci_err_stats_inc(host, err_name) \
+ mmc_debugfs_err_stats_inc((host)->mmc, MMC_ERR_##err_name)
+
enum sdhci_cookie {
COOKIE_UNMAPPED,
COOKIE_PRE_MAPPED, /* mapped by sdhci_pre_req() */
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index c376209..2d66c89 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -90,6 +90,12 @@ static inline bool mmc_op_multi(u32 opcode)
opcode == MMC_READ_MULTIPLE_BLOCK;
}
+static inline bool mmc_op_tuning(u32 opcode)
+{
+ return opcode == MMC_SEND_TUNING_BLOCK ||
+ opcode == MMC_SEND_TUNING_BLOCK_HS200;
+}
+
/*
* MMC_SWITCH argument format:
*
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V7 3/4] mmc: debugfs: Add debug fs entry for mmc driver
2022-05-25 12:28 [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 1/4] mmc: core: Capture eMMC and SD card errors Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 2/4] mmc: sdhci: " Shaik Sajida Bhanu
@ 2022-05-25 12:28 ` Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 4/4] mmc: debugfs: Add debug fs error state " Shaik Sajida Bhanu
2022-05-27 9:45 ` [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Adrian Hunter
4 siblings, 0 replies; 7+ messages in thread
From: Shaik Sajida Bhanu @ 2022-05-25 12:28 UTC (permalink / raw)
To: adrian.hunter, ulf.hansson, agross, bjorn.andersson, p.zabel,
chris, venkatg, gdjakov, quic_asutoshd
Cc: linux-arm-msm, linux-mmc, linux-kernel, quic_rampraka,
quic_pragalla, quic_sartgarg, quic_nitirawa, quic_sayalil,
Shaik Sajida Bhanu, Liangliang Lu, Bao D . Nguyen
Add debug fs entry to query eMMC and SD card errors statistics
Signed-off-by: Liangliang Lu <quic_luliang@quicinc.com>
Signed-off-by: Sayali Lokhande <quic_sayalil@quicinc.com>
Signed-off-by: Bao D. Nguyen <quic_nguyenb@quicinc.com>
Signed-off-by: Shaik Sajida Bhanu <quic_c_sbhanu@quicinc.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
---
drivers/mmc/core/debugfs.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
index c8451ce..f9fb51f 100644
--- a/drivers/mmc/core/debugfs.c
+++ b/drivers/mmc/core/debugfs.c
@@ -234,6 +234,59 @@ static int mmc_clock_opt_set(void *data, u64 val)
DEFINE_SIMPLE_ATTRIBUTE(mmc_clock_fops, mmc_clock_opt_get, mmc_clock_opt_set,
"%llu\n");
+static int mmc_err_stats_show(struct seq_file *file, void *data)
+{
+ struct mmc_host *host = (struct mmc_host *)file->private;
+ const char *desc[MMC_ERR_MAX] = {
+ [MMC_ERR_CMD_TIMEOUT] = "Command Timeout Occurred",
+ [MMC_ERR_CMD_CRC] = "Command CRC Errors Occurred",
+ [MMC_ERR_DAT_TIMEOUT] = "Data Timeout Occurred",
+ [MMC_ERR_DAT_CRC] = "Data CRC Errors Occurred",
+ [MMC_ERR_AUTO_CMD] = "Auto-Cmd Error Occurred",
+ [MMC_ERR_ADMA] = "ADMA Error Occurred",
+ [MMC_ERR_TUNING] = "Tuning Error Occurred",
+ [MMC_ERR_CMDQ_RED] = "CMDQ RED Errors",
+ [MMC_ERR_CMDQ_GCE] = "CMDQ GCE Errors",
+ [MMC_ERR_CMDQ_ICCE] = "CMDQ ICCE Errors",
+ [MMC_ERR_REQ_TIMEOUT] = "Request Timedout",
+ [MMC_ERR_CMDQ_REQ_TIMEOUT] = "CMDQ Request Timedout",
+ [MMC_ERR_ICE_CFG] = "ICE Config Errors",
+ [MMC_ERR_CTRL_TIMEOUT] = "Controller Timedout errors",
+ [MMC_ERR_UNEXPECTED_IRQ] = "Unexpected IRQ errors",
+ };
+ int i;
+
+ for (i = 0; i < MMC_ERR_MAX; i++) {
+ if (desc[i])
+ seq_printf(file, "# %s:\t %d\n",
+ desc[i], host->err_stats[i]);
+ }
+
+ return 0;
+}
+
+static int mmc_err_stats_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, mmc_err_stats_show, inode->i_private);
+}
+
+static ssize_t mmc_err_stats_write(struct file *filp, const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ struct mmc_host *host = filp->f_mapping->host->i_private;
+
+ pr_debug("%s: Resetting MMC error statistics\n", __func__);
+ memset(host->err_stats, 0, sizeof(host->err_stats));
+
+ return cnt;
+}
+
+static const struct file_operations mmc_err_stats_fops = {
+ .open = mmc_err_stats_open,
+ .read = seq_read,
+ .write = mmc_err_stats_write,
+};
+
void mmc_add_host_debugfs(struct mmc_host *host)
{
struct dentry *root;
@@ -256,6 +309,9 @@ void mmc_add_host_debugfs(struct mmc_host *host)
&mmc_clock_fops))
goto err_node;
+ if (!debugfs_create_file("err_stats", 0600, root, host,
+ &mmc_err_stats_fops))
+ goto err_node;
#ifdef CONFIG_FAIL_MMC_REQUEST
if (fail_request)
setup_fault_attr(&fail_default_attr, fail_request);
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH V7 4/4] mmc: debugfs: Add debug fs error state entry for mmc driver
2022-05-25 12:28 [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Shaik Sajida Bhanu
` (2 preceding siblings ...)
2022-05-25 12:28 ` [PATCH V7 3/4] mmc: debugfs: Add debug fs entry for mmc driver Shaik Sajida Bhanu
@ 2022-05-25 12:28 ` Shaik Sajida Bhanu
2022-05-27 9:45 ` [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Adrian Hunter
4 siblings, 0 replies; 7+ messages in thread
From: Shaik Sajida Bhanu @ 2022-05-25 12:28 UTC (permalink / raw)
To: adrian.hunter, ulf.hansson, agross, bjorn.andersson, p.zabel,
chris, venkatg, gdjakov, quic_asutoshd
Cc: linux-arm-msm, linux-mmc, linux-kernel, quic_rampraka,
quic_pragalla, quic_sartgarg, quic_nitirawa, quic_sayalil,
Shaik Sajida Bhanu, Liangliang Lu, Bao D . Nguyen
Add debug fs entry error state to query eMMC and SD card errors statistics.
If any errors occurred in eMMC and SD card driver level then
err_state value will be set to 1.
Signed-off-by: Liangliang Lu <quic_luliang@quicinc.com>
Signed-off-by: Sayali Lokhande <quic_sayalil@quicinc.com>
Signed-off-by: Bao D. Nguyen <quic_nguyenb@quicinc.com>
Signed-off-by: Shaik Sajida Bhanu <quic_c_sbhanu@quicinc.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
---
drivers/mmc/core/debugfs.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/mmc/core/debugfs.c b/drivers/mmc/core/debugfs.c
index f9fb51f..d8ff66f 100644
--- a/drivers/mmc/core/debugfs.c
+++ b/drivers/mmc/core/debugfs.c
@@ -234,6 +234,27 @@ static int mmc_clock_opt_set(void *data, u64 val)
DEFINE_SIMPLE_ATTRIBUTE(mmc_clock_fops, mmc_clock_opt_get, mmc_clock_opt_set,
"%llu\n");
+static int mmc_err_state_get(void *data, u64 *val)
+{
+ struct mmc_host *host = data;
+ int i;
+
+ if (!host)
+ return -EINVAL;
+
+ *val = 0;
+ for (i = 0; i < MMC_ERR_MAX; i++) {
+ if (host->err_stats[i]) {
+ *val = 1;
+ break;
+ }
+ }
+
+ return 0;
+}
+
+DEFINE_DEBUGFS_ATTRIBUTE(mmc_err_state, mmc_err_state_get, NULL, "%llu\n");
+
static int mmc_err_stats_show(struct seq_file *file, void *data)
{
struct mmc_host *host = (struct mmc_host *)file->private;
@@ -309,6 +330,10 @@ void mmc_add_host_debugfs(struct mmc_host *host)
&mmc_clock_fops))
goto err_node;
+ if (!debugfs_create_file_unsafe("err_state", 0600, root, host,
+ &mmc_err_state))
+ goto err_node;
+
if (!debugfs_create_file("err_stats", 0600, root, host,
&mmc_err_stats_fops))
goto err_node;
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card
2022-05-25 12:28 [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Shaik Sajida Bhanu
` (3 preceding siblings ...)
2022-05-25 12:28 ` [PATCH V7 4/4] mmc: debugfs: Add debug fs error state " Shaik Sajida Bhanu
@ 2022-05-27 9:45 ` Adrian Hunter
2022-05-27 13:59 ` Sajida Bhanu (Temp)
4 siblings, 1 reply; 7+ messages in thread
From: Adrian Hunter @ 2022-05-27 9:45 UTC (permalink / raw)
To: Shaik Sajida Bhanu, ulf.hansson, agross, bjorn.andersson,
p.zabel, chris, venkatg, gdjakov, quic_asutoshd
Cc: linux-arm-msm, linux-mmc, linux-kernel, quic_rampraka,
quic_pragalla, quic_sartgarg, quic_nitirawa, quic_sayalil
On 25/05/22 15:28, Shaik Sajida Bhanu wrote:
> Changes since V6:
> - Rebased on Ulf's(Ulf Hansson) next branch as suggested by
> Adrain Hunter.
I think maybe you re-based on the "master" branch not the "next" branch, please check
> - Replaced debugfs_create_file() with debugfs_create_file_unsafe()
> as suggested by Adrain Hunter.
> - "[V6,5/5] mmc: cqhci: Capture eMMC and SD card errors" not included
> in this Patch series as we don't have cqhci changes on Ulf's(Ulf Hansson)
> next branch.
cqhci is in the "next" branch, please check
>
> Changes since V5:
> - Considered all error stats enums to set error state.
> - Added missed tuning error related code changes which was
> missed in patch set V5 as Adrain Hunter pointed.
> - Replaced DEFINE_SIMPLE_ATTRIBUTE with DEFINE_DEBUGFS_ATTRIBUTE
> as suggested by Adrain Hunter.
>
> Changes since V4:
> - Defined new macro to increment err_stats members when error occurred
> as suggested by Adrain Hunter.
> - Called err_stats members increment function after printing the error
> as suggested by Adrain Hunter.
> - Considered INDEX and END_BIT errors same as CRC errors as suggested
> by Adrain Hunter.
> - Removed Null check for host in debug fs functions and Reordered
> err_stats declarationas suggested by Adrain Hunter.
> - Removed err_state variable stuff and updated err_state debug fs entry
> based on the err_stats members state as suggested by Adrain Hunter.
>
> Changes since V3:
> - Dropped error stats feature flag as suggested by Adrain Hunter.
> - Separated error state related changes in separate patches as
> suggested by Adrain Hunter.
> [PATCH V4 4/7] : error state debug fs
> [PATCH V4 5/7] : error state enable function
> [PATCH V4 6/7] : error state enable in error case
> - Note: we are enabling error state before calling sdhci_dumpregs
> we couldn't add the err state in error stats array as err state
> is not error type.
> - Corrected Signed-off-by order as suggested by Bjron Andersson.
> - Moved error state enable code from sdhci_dumpregs to error
> conditions as suggested by Adrain Hunter
>
> Changes since V2:
> - Removed userspace error stats clear debug fs entry as suggested
> by Adrain Hunter.
> - Split patch into 4 patches
> [PATCH V3 1/4] : sdhci driver
> [PATCH V3 2/4] : debug fs entries
> [PATCH V3 3/4] : core driver
> [PATCH V3 4/4] : cqhci driver
> - Used for loop to print error messages instead of using printf
> statements for all error messages as suggested by Adrain Hunter.
> - Introduced one flag to enable error stats feature, if any other
> client wants to use this feature, they need to enable that flag.
> - Moved reset command timeout error statement to card init flow
> as suggested by Adrain Hunter.
>
> Changes since V1:
> - Removed sysfs entry for eMMC and SD card error statistics and added
> debugfs entry as suggested by Adrian Hunter and Ulf Hansson.
>
> Shaik Sajida Bhanu (4):
> mmc: core: Capture eMMC and SD card errors
> mmc: sdhci: Capture eMMC and SD card errors
> mmc: debugfs: Add debug fs entry for mmc driver
> mmc: debugfs: Add debug fs error state entry for mmc driver
>
> drivers/mmc/core/core.c | 11 +++++--
> drivers/mmc/core/debugfs.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++
> drivers/mmc/host/sdhci.c | 33 +++++++++++++++----
> drivers/mmc/host/sdhci.h | 3 ++
> include/linux/mmc/host.h | 26 +++++++++++++++
> include/linux/mmc/mmc.h | 6 ++++
> 6 files changed, 151 insertions(+), 9 deletions(-)
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card
2022-05-27 9:45 ` [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Adrian Hunter
@ 2022-05-27 13:59 ` Sajida Bhanu (Temp)
0 siblings, 0 replies; 7+ messages in thread
From: Sajida Bhanu (Temp) @ 2022-05-27 13:59 UTC (permalink / raw)
To: Adrian Hunter, ulf.hansson, agross, bjorn.andersson, p.zabel,
chris, venkatg, gdjakov, quic_asutoshd
Cc: linux-arm-msm, linux-mmc, linux-kernel, quic_rampraka,
quic_pragalla, quic_sartgarg, quic_nitirawa, quic_sayalil
On 5/27/2022 3:15 PM, Adrian Hunter wrote:
> On 25/05/22 15:28, Shaik Sajida Bhanu wrote:
>> Changes since V6:
>> - Rebased on Ulf's(Ulf Hansson) next branch as suggested by
>> Adrain Hunter.
> I think maybe you re-based on the "master" branch not the "next" branch, please check
Sure got it Thank you.. will re-base on next branch and post
>
>> - Replaced debugfs_create_file() with debugfs_create_file_unsafe()
>> as suggested by Adrain Hunter.
>> - "[V6,5/5] mmc: cqhci: Capture eMMC and SD card errors" not included
>> in this Patch series as we don't have cqhci changes on Ulf's(Ulf Hansson)
>> next branch.
> cqhci is in the "next" branch, please check
Sure Thank you
>
>> Changes since V5:
>> - Considered all error stats enums to set error state.
>> - Added missed tuning error related code changes which was
>> missed in patch set V5 as Adrain Hunter pointed.
>> - Replaced DEFINE_SIMPLE_ATTRIBUTE with DEFINE_DEBUGFS_ATTRIBUTE
>> as suggested by Adrain Hunter.
>>
>> Changes since V4:
>> - Defined new macro to increment err_stats members when error occurred
>> as suggested by Adrain Hunter.
>> - Called err_stats members increment function after printing the error
>> as suggested by Adrain Hunter.
>> - Considered INDEX and END_BIT errors same as CRC errors as suggested
>> by Adrain Hunter.
>> - Removed Null check for host in debug fs functions and Reordered
>> err_stats declarationas suggested by Adrain Hunter.
>> - Removed err_state variable stuff and updated err_state debug fs entry
>> based on the err_stats members state as suggested by Adrain Hunter.
>>
>> Changes since V3:
>> - Dropped error stats feature flag as suggested by Adrain Hunter.
>> - Separated error state related changes in separate patches as
>> suggested by Adrain Hunter.
>> [PATCH V4 4/7] : error state debug fs
>> [PATCH V4 5/7] : error state enable function
>> [PATCH V4 6/7] : error state enable in error case
>> - Note: we are enabling error state before calling sdhci_dumpregs
>> we couldn't add the err state in error stats array as err state
>> is not error type.
>> - Corrected Signed-off-by order as suggested by Bjron Andersson.
>> - Moved error state enable code from sdhci_dumpregs to error
>> conditions as suggested by Adrain Hunter
>>
>> Changes since V2:
>> - Removed userspace error stats clear debug fs entry as suggested
>> by Adrain Hunter.
>> - Split patch into 4 patches
>> [PATCH V3 1/4] : sdhci driver
>> [PATCH V3 2/4] : debug fs entries
>> [PATCH V3 3/4] : core driver
>> [PATCH V3 4/4] : cqhci driver
>> - Used for loop to print error messages instead of using printf
>> statements for all error messages as suggested by Adrain Hunter.
>> - Introduced one flag to enable error stats feature, if any other
>> client wants to use this feature, they need to enable that flag.
>> - Moved reset command timeout error statement to card init flow
>> as suggested by Adrain Hunter.
>>
>> Changes since V1:
>> - Removed sysfs entry for eMMC and SD card error statistics and added
>> debugfs entry as suggested by Adrian Hunter and Ulf Hansson.
>>
>> Shaik Sajida Bhanu (4):
>> mmc: core: Capture eMMC and SD card errors
>> mmc: sdhci: Capture eMMC and SD card errors
>> mmc: debugfs: Add debug fs entry for mmc driver
>> mmc: debugfs: Add debug fs error state entry for mmc driver
>>
>> drivers/mmc/core/core.c | 11 +++++--
>> drivers/mmc/core/debugfs.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++
>> drivers/mmc/host/sdhci.c | 33 +++++++++++++++----
>> drivers/mmc/host/sdhci.h | 3 ++
>> include/linux/mmc/host.h | 26 +++++++++++++++
>> include/linux/mmc/mmc.h | 6 ++++
>> 6 files changed, 151 insertions(+), 9 deletions(-)
>>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-05-27 13:59 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-25 12:28 [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 1/4] mmc: core: Capture eMMC and SD card errors Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 2/4] mmc: sdhci: " Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 3/4] mmc: debugfs: Add debug fs entry for mmc driver Shaik Sajida Bhanu
2022-05-25 12:28 ` [PATCH V7 4/4] mmc: debugfs: Add debug fs error state " Shaik Sajida Bhanu
2022-05-27 9:45 ` [PATCH V7 0/4] mmc: add error statistics for eMMC and SD card Adrian Hunter
2022-05-27 13:59 ` Sajida Bhanu (Temp)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).