|
@@ -2328,6 +2328,31 @@ static int mmc_test_profile_sglen_r_nonblock_perf(struct mmc_test_card *test)
|
|
|
return mmc_test_rw_multiple_sg_len(test, &test_data);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * eMMC hardware reset.
|
|
|
+ */
|
|
|
+static int mmc_test_hw_reset(struct mmc_test_card *test)
|
|
|
+{
|
|
|
+ struct mmc_card *card = test->card;
|
|
|
+ struct mmc_host *host = card->host;
|
|
|
+ int err;
|
|
|
+
|
|
|
+ err = mmc_hw_reset_check(host);
|
|
|
+ if (!err)
|
|
|
+ return RESULT_OK;
|
|
|
+
|
|
|
+ if (err == -ENOSYS)
|
|
|
+ return RESULT_FAIL;
|
|
|
+
|
|
|
+ if (err != -EOPNOTSUPP)
|
|
|
+ return err;
|
|
|
+
|
|
|
+ if (!mmc_can_reset(card))
|
|
|
+ return RESULT_UNSUP_CARD;
|
|
|
+
|
|
|
+ return RESULT_UNSUP_HOST;
|
|
|
+}
|
|
|
+
|
|
|
static const struct mmc_test_case mmc_test_cases[] = {
|
|
|
{
|
|
|
.name = "Basic write (no data verification)",
|
|
@@ -2650,6 +2675,11 @@ static const struct mmc_test_case mmc_test_cases[] = {
|
|
|
.run = mmc_test_profile_sglen_r_nonblock_perf,
|
|
|
.cleanup = mmc_test_area_cleanup,
|
|
|
},
|
|
|
+
|
|
|
+ {
|
|
|
+ .name = "eMMC hardware reset",
|
|
|
+ .run = mmc_test_hw_reset,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static DEFINE_MUTEX(mmc_test_lock);
|