aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWolfram Sang <wsa@the-dreams.de>2018-03-21 21:16:11 +0100
committerWolfram Sang <wsa@the-dreams.de>2018-03-22 16:51:02 +0100
commit70c3b130a7c27b6f06abd3871cf09e08a139f7ad (patch)
tree3dbb9dc9197fae641f24259346e97f64de8dfa0e
parentc698ca5278934c0ae32297a8725ced2e27585d7f (diff)
downloadlinux-mmc/retune-test.tar.gz
WIP mmc retune testmmc/retune-test
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
-rw-r--r--drivers/mmc/core/mmc_test.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/mmc/core/mmc_test.c b/drivers/mmc/core/mmc_test.c
index ef18daeaa4cc6f..d6e6e74f54ed03 100644
--- a/drivers/mmc/core/mmc_test.c
+++ b/drivers/mmc/core/mmc_test.c
@@ -2335,6 +2335,35 @@ static int mmc_test_reset(struct mmc_test_card *test)
return RESULT_FAIL;
}
+/*
+ * Test tuning (SDR104, HS200 and upwards)
+ */
+
+#define NUM_TUNE_TESTS 1000
+
+static int mmc_test_retune(struct mmc_test_card *test)
+{
+ struct mmc_host *host = test->card->host;
+ unsigned int fail = 0, i;
+
+/* FIXME
+ * if (!card_can_retune)
+ * return RESULT_UNSUP_CARD;
+ */
+
+ for (i = 0; i < NUM_TUNE_TESTS; i++) {
+ mmc_retune_needed(host);
+ mmc_retune_recheck(host);
+ if (mmc_retune(host))
+ fail++;
+ }
+
+ pr_info("%s: %u out of %u retunes failed\n", mmc_hostname(host),
+ fail, NUM_TUNE_TESTS);
+
+ return fail == 0 ? RESULT_OK : RESULT_FAIL;
+}
+
static int mmc_test_send_status(struct mmc_test_card *test,
struct mmc_command *cmd)
{
@@ -2918,6 +2947,12 @@ static const struct mmc_test_case mmc_test_cases[] = {
.run = mmc_test_cmds_during_write_cmd23_nonblock,
.cleanup = mmc_test_area_cleanup,
},
+
+ {
+ .name = "Retuning test",
+ .run = mmc_test_retune,
+ },
+
};
static DEFINE_MUTEX(mmc_test_lock);