Lines Matching refs:test

172 	struct mmc_test_card *test;  member
182 static int mmc_test_set_blksize(struct mmc_test_card *test, unsigned size) in mmc_test_set_blksize() argument
184 return mmc_set_blocklen(test->card, size); in mmc_test_set_blksize()
190 static void mmc_test_prepare_mrq(struct mmc_test_card *test, in mmc_test_prepare_mrq() argument
205 if (!mmc_card_blockaddr(test->card)) in mmc_test_prepare_mrq()
224 mmc_set_data_timeout(mrq->data, test->card); in mmc_test_prepare_mrq()
236 static int mmc_test_wait_busy(struct mmc_test_card *test) in mmc_test_wait_busy() argument
246 cmd.arg = test->card->rca << 16; in mmc_test_wait_busy()
249 ret = mmc_wait_for_cmd(test->card->host, &cmd, 0); in mmc_test_wait_busy()
255 if (test->card->host->caps & MMC_CAP_WAIT_WHILE_BUSY) in mmc_test_wait_busy()
258 mmc_hostname(test->card->host)); in mmc_test_wait_busy()
268 static int mmc_test_buffer_transfer(struct mmc_test_card *test, in mmc_test_buffer_transfer() argument
286 mmc_test_prepare_mrq(test, &mrq, &sg, 1, addr, 1, blksz, write); in mmc_test_buffer_transfer()
288 mmc_wait_for_req(test->card->host, &mrq); in mmc_test_buffer_transfer()
295 ret = mmc_test_wait_busy(test); in mmc_test_buffer_transfer()
522 static void mmc_test_save_transfer_result(struct mmc_test_card *test, in mmc_test_save_transfer_result() argument
528 if (!test->gr) in mmc_test_save_transfer_result()
541 list_add_tail(&tr->link, &test->gr->tr_lst); in mmc_test_save_transfer_result()
547 static void mmc_test_print_rate(struct mmc_test_card *test, uint64_t bytes, in mmc_test_print_rate() argument
560 mmc_hostname(test->card->host), sectors, sectors >> 1, in mmc_test_print_rate()
565 mmc_test_save_transfer_result(test, 1, sectors, ts, rate, iops); in mmc_test_print_rate()
571 static void mmc_test_print_avg_rate(struct mmc_test_card *test, uint64_t bytes, in mmc_test_print_avg_rate() argument
587 mmc_hostname(test->card->host), count, sectors, count, in mmc_test_print_avg_rate()
591 test->area.sg_len); in mmc_test_print_avg_rate()
593 mmc_test_save_transfer_result(test, count, sectors, ts, rate, iops); in mmc_test_print_avg_rate()
615 static int __mmc_test_prepare(struct mmc_test_card *test, int write) in __mmc_test_prepare() argument
619 ret = mmc_test_set_blksize(test, 512); in __mmc_test_prepare()
624 memset(test->buffer, 0xDF, 512); in __mmc_test_prepare()
627 test->buffer[i] = i; in __mmc_test_prepare()
631 ret = mmc_test_buffer_transfer(test, test->buffer, i, 512, 1); in __mmc_test_prepare()
639 static int mmc_test_prepare_write(struct mmc_test_card *test) in mmc_test_prepare_write() argument
641 return __mmc_test_prepare(test, 1); in mmc_test_prepare_write()
644 static int mmc_test_prepare_read(struct mmc_test_card *test) in mmc_test_prepare_read() argument
646 return __mmc_test_prepare(test, 0); in mmc_test_prepare_read()
649 static int mmc_test_cleanup(struct mmc_test_card *test) in mmc_test_cleanup() argument
653 ret = mmc_test_set_blksize(test, 512); in mmc_test_cleanup()
657 memset(test->buffer, 0, 512); in mmc_test_cleanup()
660 ret = mmc_test_buffer_transfer(test, test->buffer, i, 512, 1); in mmc_test_cleanup()
675 static void mmc_test_prepare_broken_mrq(struct mmc_test_card *test, in mmc_test_prepare_broken_mrq() argument
686 mrq->cmd->arg = test->card->rca << 16; in mmc_test_prepare_broken_mrq()
693 static int mmc_test_check_result(struct mmc_test_card *test, in mmc_test_check_result() argument
724 mmc_test_wait_busy(test_async->test); in mmc_test_check_result_async()
726 return mmc_test_check_result(test_async->test, areq->mrq); in mmc_test_check_result_async()
732 static int mmc_test_check_broken_result(struct mmc_test_card *test, in mmc_test_check_broken_result() argument
780 static int mmc_test_nonblock_transfer(struct mmc_test_card *test, in mmc_test_nonblock_transfer() argument
802 test_areq[0].test = test; in mmc_test_nonblock_transfer()
803 test_areq[1].test = test; in mmc_test_nonblock_transfer()
814 mmc_test_prepare_mrq(test, cur_areq->mrq, sg, sg_len, dev_addr, in mmc_test_nonblock_transfer()
816 done_areq = mmc_start_req(test->card->host, cur_areq, &ret); in mmc_test_nonblock_transfer()
835 done_areq = mmc_start_req(test->card->host, NULL, &ret); in mmc_test_nonblock_transfer()
845 static int mmc_test_simple_transfer(struct mmc_test_card *test, in mmc_test_simple_transfer() argument
858 mmc_test_prepare_mrq(test, &mrq, sg, sg_len, dev_addr, in mmc_test_simple_transfer()
861 mmc_wait_for_req(test->card->host, &mrq); in mmc_test_simple_transfer()
863 mmc_test_wait_busy(test); in mmc_test_simple_transfer()
865 return mmc_test_check_result(test, &mrq); in mmc_test_simple_transfer()
871 static int mmc_test_broken_transfer(struct mmc_test_card *test, in mmc_test_broken_transfer() argument
885 sg_init_one(&sg, test->buffer, blocks * blksz); in mmc_test_broken_transfer()
887 mmc_test_prepare_mrq(test, &mrq, &sg, 1, 0, blocks, blksz, write); in mmc_test_broken_transfer()
888 mmc_test_prepare_broken_mrq(test, &mrq, write); in mmc_test_broken_transfer()
890 mmc_wait_for_req(test->card->host, &mrq); in mmc_test_broken_transfer()
892 mmc_test_wait_busy(test); in mmc_test_broken_transfer()
894 return mmc_test_check_broken_result(test, &mrq); in mmc_test_broken_transfer()
902 static int mmc_test_transfer(struct mmc_test_card *test, in mmc_test_transfer() argument
911 test->scratch[i] = i; in mmc_test_transfer()
913 memset(test->scratch, 0, BUFFER_SIZE); in mmc_test_transfer()
916 sg_copy_from_buffer(sg, sg_len, test->scratch, BUFFER_SIZE); in mmc_test_transfer()
919 ret = mmc_test_set_blksize(test, blksz); in mmc_test_transfer()
923 ret = mmc_test_simple_transfer(test, sg, sg_len, dev_addr, in mmc_test_transfer()
931 ret = mmc_test_set_blksize(test, 512); in mmc_test_transfer()
942 memset(test->buffer, 0, sectors * 512); in mmc_test_transfer()
945 ret = mmc_test_buffer_transfer(test, in mmc_test_transfer()
946 test->buffer + i * 512, in mmc_test_transfer()
953 if (test->buffer[i] != (u8)i) in mmc_test_transfer()
958 if (test->buffer[i] != 0xDF) in mmc_test_transfer()
963 sg_copy_to_buffer(sg, sg_len, test->scratch, BUFFER_SIZE); in mmc_test_transfer()
966 if (test->scratch[i] != (u8)i) in mmc_test_transfer()
986 static int mmc_test_basic_write(struct mmc_test_card *test) in mmc_test_basic_write() argument
991 ret = mmc_test_set_blksize(test, 512); in mmc_test_basic_write()
995 sg_init_one(&sg, test->buffer, 512); in mmc_test_basic_write()
997 ret = mmc_test_simple_transfer(test, &sg, 1, 0, 1, 512, 1); in mmc_test_basic_write()
1004 static int mmc_test_basic_read(struct mmc_test_card *test) in mmc_test_basic_read() argument
1009 ret = mmc_test_set_blksize(test, 512); in mmc_test_basic_read()
1013 sg_init_one(&sg, test->buffer, 512); in mmc_test_basic_read()
1015 ret = mmc_test_simple_transfer(test, &sg, 1, 0, 1, 512, 0); in mmc_test_basic_read()
1022 static int mmc_test_verify_write(struct mmc_test_card *test) in mmc_test_verify_write() argument
1027 sg_init_one(&sg, test->buffer, 512); in mmc_test_verify_write()
1029 ret = mmc_test_transfer(test, &sg, 1, 0, 1, 512, 1); in mmc_test_verify_write()
1036 static int mmc_test_verify_read(struct mmc_test_card *test) in mmc_test_verify_read() argument
1041 sg_init_one(&sg, test->buffer, 512); in mmc_test_verify_read()
1043 ret = mmc_test_transfer(test, &sg, 1, 0, 1, 512, 0); in mmc_test_verify_read()
1050 static int mmc_test_multi_write(struct mmc_test_card *test) in mmc_test_multi_write() argument
1056 if (test->card->host->max_blk_count == 1) in mmc_test_multi_write()
1060 size = min(size, test->card->host->max_req_size); in mmc_test_multi_write()
1061 size = min(size, test->card->host->max_seg_size); in mmc_test_multi_write()
1062 size = min(size, test->card->host->max_blk_count * 512); in mmc_test_multi_write()
1067 sg_init_one(&sg, test->buffer, size); in mmc_test_multi_write()
1069 ret = mmc_test_transfer(test, &sg, 1, 0, size/512, 512, 1); in mmc_test_multi_write()
1076 static int mmc_test_multi_read(struct mmc_test_card *test) in mmc_test_multi_read() argument
1082 if (test->card->host->max_blk_count == 1) in mmc_test_multi_read()
1086 size = min(size, test->card->host->max_req_size); in mmc_test_multi_read()
1087 size = min(size, test->card->host->max_seg_size); in mmc_test_multi_read()
1088 size = min(size, test->card->host->max_blk_count * 512); in mmc_test_multi_read()
1093 sg_init_one(&sg, test->buffer, size); in mmc_test_multi_read()
1095 ret = mmc_test_transfer(test, &sg, 1, 0, size/512, 512, 0); in mmc_test_multi_read()
1102 static int mmc_test_pow2_write(struct mmc_test_card *test) in mmc_test_pow2_write() argument
1107 if (!test->card->csd.write_partial) in mmc_test_pow2_write()
1111 sg_init_one(&sg, test->buffer, i); in mmc_test_pow2_write()
1112 ret = mmc_test_transfer(test, &sg, 1, 0, 1, i, 1); in mmc_test_pow2_write()
1120 static int mmc_test_pow2_read(struct mmc_test_card *test) in mmc_test_pow2_read() argument
1125 if (!test->card->csd.read_partial) in mmc_test_pow2_read()
1129 sg_init_one(&sg, test->buffer, i); in mmc_test_pow2_read()
1130 ret = mmc_test_transfer(test, &sg, 1, 0, 1, i, 0); in mmc_test_pow2_read()
1138 static int mmc_test_weird_write(struct mmc_test_card *test) in mmc_test_weird_write() argument
1143 if (!test->card->csd.write_partial) in mmc_test_weird_write()
1147 sg_init_one(&sg, test->buffer, i); in mmc_test_weird_write()
1148 ret = mmc_test_transfer(test, &sg, 1, 0, 1, i, 1); in mmc_test_weird_write()
1156 static int mmc_test_weird_read(struct mmc_test_card *test) in mmc_test_weird_read() argument
1161 if (!test->card->csd.read_partial) in mmc_test_weird_read()
1165 sg_init_one(&sg, test->buffer, i); in mmc_test_weird_read()
1166 ret = mmc_test_transfer(test, &sg, 1, 0, 1, i, 0); in mmc_test_weird_read()
1174 static int mmc_test_align_write(struct mmc_test_card *test) in mmc_test_align_write() argument
1180 sg_init_one(&sg, test->buffer + i, 512); in mmc_test_align_write()
1181 ret = mmc_test_transfer(test, &sg, 1, 0, 1, 512, 1); in mmc_test_align_write()
1189 static int mmc_test_align_read(struct mmc_test_card *test) in mmc_test_align_read() argument
1195 sg_init_one(&sg, test->buffer + i, 512); in mmc_test_align_read()
1196 ret = mmc_test_transfer(test, &sg, 1, 0, 1, 512, 0); in mmc_test_align_read()
1204 static int mmc_test_align_multi_write(struct mmc_test_card *test) in mmc_test_align_multi_write() argument
1210 if (test->card->host->max_blk_count == 1) in mmc_test_align_multi_write()
1214 size = min(size, test->card->host->max_req_size); in mmc_test_align_multi_write()
1215 size = min(size, test->card->host->max_seg_size); in mmc_test_align_multi_write()
1216 size = min(size, test->card->host->max_blk_count * 512); in mmc_test_align_multi_write()
1222 sg_init_one(&sg, test->buffer + i, size); in mmc_test_align_multi_write()
1223 ret = mmc_test_transfer(test, &sg, 1, 0, size/512, 512, 1); in mmc_test_align_multi_write()
1231 static int mmc_test_align_multi_read(struct mmc_test_card *test) in mmc_test_align_multi_read() argument
1237 if (test->card->host->max_blk_count == 1) in mmc_test_align_multi_read()
1241 size = min(size, test->card->host->max_req_size); in mmc_test_align_multi_read()
1242 size = min(size, test->card->host->max_seg_size); in mmc_test_align_multi_read()
1243 size = min(size, test->card->host->max_blk_count * 512); in mmc_test_align_multi_read()
1249 sg_init_one(&sg, test->buffer + i, size); in mmc_test_align_multi_read()
1250 ret = mmc_test_transfer(test, &sg, 1, 0, size/512, 512, 0); in mmc_test_align_multi_read()
1258 static int mmc_test_xfersize_write(struct mmc_test_card *test) in mmc_test_xfersize_write() argument
1262 ret = mmc_test_set_blksize(test, 512); in mmc_test_xfersize_write()
1266 ret = mmc_test_broken_transfer(test, 1, 512, 1); in mmc_test_xfersize_write()
1273 static int mmc_test_xfersize_read(struct mmc_test_card *test) in mmc_test_xfersize_read() argument
1277 ret = mmc_test_set_blksize(test, 512); in mmc_test_xfersize_read()
1281 ret = mmc_test_broken_transfer(test, 1, 512, 0); in mmc_test_xfersize_read()
1288 static int mmc_test_multi_xfersize_write(struct mmc_test_card *test) in mmc_test_multi_xfersize_write() argument
1292 if (test->card->host->max_blk_count == 1) in mmc_test_multi_xfersize_write()
1295 ret = mmc_test_set_blksize(test, 512); in mmc_test_multi_xfersize_write()
1299 ret = mmc_test_broken_transfer(test, 2, 512, 1); in mmc_test_multi_xfersize_write()
1306 static int mmc_test_multi_xfersize_read(struct mmc_test_card *test) in mmc_test_multi_xfersize_read() argument
1310 if (test->card->host->max_blk_count == 1) in mmc_test_multi_xfersize_read()
1313 ret = mmc_test_set_blksize(test, 512); in mmc_test_multi_xfersize_read()
1317 ret = mmc_test_broken_transfer(test, 2, 512, 0); in mmc_test_multi_xfersize_read()
1326 static int mmc_test_write_high(struct mmc_test_card *test) in mmc_test_write_high() argument
1332 sg_set_page(&sg, test->highmem, 512, 0); in mmc_test_write_high()
1334 ret = mmc_test_transfer(test, &sg, 1, 0, 1, 512, 1); in mmc_test_write_high()
1341 static int mmc_test_read_high(struct mmc_test_card *test) in mmc_test_read_high() argument
1347 sg_set_page(&sg, test->highmem, 512, 0); in mmc_test_read_high()
1349 ret = mmc_test_transfer(test, &sg, 1, 0, 1, 512, 0); in mmc_test_read_high()
1356 static int mmc_test_multi_write_high(struct mmc_test_card *test) in mmc_test_multi_write_high() argument
1362 if (test->card->host->max_blk_count == 1) in mmc_test_multi_write_high()
1366 size = min(size, test->card->host->max_req_size); in mmc_test_multi_write_high()
1367 size = min(size, test->card->host->max_seg_size); in mmc_test_multi_write_high()
1368 size = min(size, test->card->host->max_blk_count * 512); in mmc_test_multi_write_high()
1374 sg_set_page(&sg, test->highmem, size, 0); in mmc_test_multi_write_high()
1376 ret = mmc_test_transfer(test, &sg, 1, 0, size/512, 512, 1); in mmc_test_multi_write_high()
1383 static int mmc_test_multi_read_high(struct mmc_test_card *test) in mmc_test_multi_read_high() argument
1389 if (test->card->host->max_blk_count == 1) in mmc_test_multi_read_high()
1393 size = min(size, test->card->host->max_req_size); in mmc_test_multi_read_high()
1394 size = min(size, test->card->host->max_seg_size); in mmc_test_multi_read_high()
1395 size = min(size, test->card->host->max_blk_count * 512); in mmc_test_multi_read_high()
1401 sg_set_page(&sg, test->highmem, size, 0); in mmc_test_multi_read_high()
1403 ret = mmc_test_transfer(test, &sg, 1, 0, size/512, 512, 0); in mmc_test_multi_read_high()
1412 static int mmc_test_no_highmem(struct mmc_test_card *test) in mmc_test_no_highmem() argument
1415 mmc_hostname(test->card->host)); in mmc_test_no_highmem()
1424 static int mmc_test_area_map(struct mmc_test_card *test, unsigned long sz, in mmc_test_area_map() argument
1427 struct mmc_test_area *t = &test->area; in mmc_test_area_map()
1442 mmc_hostname(test->card->host)); in mmc_test_area_map()
1449 static int mmc_test_area_transfer(struct mmc_test_card *test, in mmc_test_area_transfer() argument
1452 struct mmc_test_area *t = &test->area; in mmc_test_area_transfer()
1454 return mmc_test_simple_transfer(test, t->sg, t->sg_len, dev_addr, in mmc_test_area_transfer()
1461 static int mmc_test_area_io_seq(struct mmc_test_card *test, unsigned long sz, in mmc_test_area_io_seq() argument
1469 struct mmc_test_area *t = &test->area; in mmc_test_area_io_seq()
1476 struct mmc_test_area *t = &test->area; in mmc_test_area_io_seq()
1487 ret = mmc_test_area_map(test, sz, max_scatter, min_sg_len); in mmc_test_area_io_seq()
1494 ret = mmc_test_nonblock_transfer(test, t->sg, t->sg_len, in mmc_test_area_io_seq()
1498 ret = mmc_test_area_transfer(test, dev_addr, write); in mmc_test_area_io_seq()
1509 mmc_test_print_avg_rate(test, sz, count, &ts1, &ts2); in mmc_test_area_io_seq()
1514 static int mmc_test_area_io(struct mmc_test_card *test, unsigned long sz, in mmc_test_area_io() argument
1518 return mmc_test_area_io_seq(test, sz, dev_addr, write, max_scatter, in mmc_test_area_io()
1525 static int mmc_test_area_fill(struct mmc_test_card *test) in mmc_test_area_fill() argument
1527 struct mmc_test_area *t = &test->area; in mmc_test_area_fill()
1529 return mmc_test_area_io(test, t->max_tfr, t->dev_addr, 1, 0, 0); in mmc_test_area_fill()
1535 static int mmc_test_area_erase(struct mmc_test_card *test) in mmc_test_area_erase() argument
1537 struct mmc_test_area *t = &test->area; in mmc_test_area_erase()
1539 if (!mmc_can_erase(test->card)) in mmc_test_area_erase()
1542 return mmc_erase(test->card, t->dev_addr, t->max_sz >> 9, in mmc_test_area_erase()
1549 static int mmc_test_area_cleanup(struct mmc_test_card *test) in mmc_test_area_cleanup() argument
1551 struct mmc_test_area *t = &test->area; in mmc_test_area_cleanup()
1566 static int mmc_test_area_init(struct mmc_test_card *test, int erase, int fill) in mmc_test_area_init() argument
1568 struct mmc_test_area *t = &test->area; in mmc_test_area_init()
1572 ret = mmc_test_set_blksize(test, 512); in mmc_test_area_init()
1577 sz = (unsigned long)test->card->pref_erase << 9; in mmc_test_area_init()
1584 t->max_segs = test->card->host->max_segs; in mmc_test_area_init()
1585 t->max_seg_sz = test->card->host->max_seg_size; in mmc_test_area_init()
1589 if (t->max_tfr >> 9 > test->card->host->max_blk_count) in mmc_test_area_init()
1590 t->max_tfr = test->card->host->max_blk_count << 9; in mmc_test_area_init()
1591 if (t->max_tfr > test->card->host->max_req_size) in mmc_test_area_init()
1592 t->max_tfr = test->card->host->max_req_size; in mmc_test_area_init()
1613 t->dev_addr = mmc_test_capacity(test->card) / 2; in mmc_test_area_init()
1617 ret = mmc_test_area_erase(test); in mmc_test_area_init()
1623 ret = mmc_test_area_fill(test); in mmc_test_area_init()
1631 mmc_test_area_cleanup(test); in mmc_test_area_init()
1638 static int mmc_test_area_prepare(struct mmc_test_card *test) in mmc_test_area_prepare() argument
1640 return mmc_test_area_init(test, 0, 0); in mmc_test_area_prepare()
1646 static int mmc_test_area_prepare_erase(struct mmc_test_card *test) in mmc_test_area_prepare_erase() argument
1648 return mmc_test_area_init(test, 1, 0); in mmc_test_area_prepare_erase()
1654 static int mmc_test_area_prepare_fill(struct mmc_test_card *test) in mmc_test_area_prepare_fill() argument
1656 return mmc_test_area_init(test, 1, 1); in mmc_test_area_prepare_fill()
1667 static int mmc_test_best_performance(struct mmc_test_card *test, int write, in mmc_test_best_performance() argument
1670 struct mmc_test_area *t = &test->area; in mmc_test_best_performance()
1672 return mmc_test_area_io(test, t->max_tfr, t->dev_addr, write, in mmc_test_best_performance()
1679 static int mmc_test_best_read_performance(struct mmc_test_card *test) in mmc_test_best_read_performance() argument
1681 return mmc_test_best_performance(test, 0, 0); in mmc_test_best_read_performance()
1687 static int mmc_test_best_write_performance(struct mmc_test_card *test) in mmc_test_best_write_performance() argument
1689 return mmc_test_best_performance(test, 1, 0); in mmc_test_best_write_performance()
1695 static int mmc_test_best_read_perf_max_scatter(struct mmc_test_card *test) in mmc_test_best_read_perf_max_scatter() argument
1697 return mmc_test_best_performance(test, 0, 1); in mmc_test_best_read_perf_max_scatter()
1703 static int mmc_test_best_write_perf_max_scatter(struct mmc_test_card *test) in mmc_test_best_write_perf_max_scatter() argument
1705 return mmc_test_best_performance(test, 1, 1); in mmc_test_best_write_perf_max_scatter()
1711 static int mmc_test_profile_read_perf(struct mmc_test_card *test) in mmc_test_profile_read_perf() argument
1713 struct mmc_test_area *t = &test->area; in mmc_test_profile_read_perf()
1720 ret = mmc_test_area_io(test, sz, dev_addr, 0, 0, 1); in mmc_test_profile_read_perf()
1726 return mmc_test_area_io(test, sz, dev_addr, 0, 0, 1); in mmc_test_profile_read_perf()
1732 static int mmc_test_profile_write_perf(struct mmc_test_card *test) in mmc_test_profile_write_perf() argument
1734 struct mmc_test_area *t = &test->area; in mmc_test_profile_write_perf()
1739 ret = mmc_test_area_erase(test); in mmc_test_profile_write_perf()
1744 ret = mmc_test_area_io(test, sz, dev_addr, 1, 0, 1); in mmc_test_profile_write_perf()
1748 ret = mmc_test_area_erase(test); in mmc_test_profile_write_perf()
1753 return mmc_test_area_io(test, sz, dev_addr, 1, 0, 1); in mmc_test_profile_write_perf()
1759 static int mmc_test_profile_trim_perf(struct mmc_test_card *test) in mmc_test_profile_trim_perf() argument
1761 struct mmc_test_area *t = &test->area; in mmc_test_profile_trim_perf()
1767 if (!mmc_can_trim(test->card)) in mmc_test_profile_trim_perf()
1770 if (!mmc_can_erase(test->card)) in mmc_test_profile_trim_perf()
1776 ret = mmc_erase(test->card, dev_addr, sz >> 9, MMC_TRIM_ARG); in mmc_test_profile_trim_perf()
1780 mmc_test_print_rate(test, sz, &ts1, &ts2); in mmc_test_profile_trim_perf()
1784 ret = mmc_erase(test->card, dev_addr, sz >> 9, MMC_TRIM_ARG); in mmc_test_profile_trim_perf()
1788 mmc_test_print_rate(test, sz, &ts1, &ts2); in mmc_test_profile_trim_perf()
1792 static int mmc_test_seq_read_perf(struct mmc_test_card *test, unsigned long sz) in mmc_test_seq_read_perf() argument
1794 struct mmc_test_area *t = &test->area; in mmc_test_seq_read_perf()
1803 ret = mmc_test_area_io(test, sz, dev_addr, 0, 0, 0); in mmc_test_seq_read_perf()
1809 mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2); in mmc_test_seq_read_perf()
1816 static int mmc_test_profile_seq_read_perf(struct mmc_test_card *test) in mmc_test_profile_seq_read_perf() argument
1818 struct mmc_test_area *t = &test->area; in mmc_test_profile_seq_read_perf()
1823 ret = mmc_test_seq_read_perf(test, sz); in mmc_test_profile_seq_read_perf()
1828 return mmc_test_seq_read_perf(test, sz); in mmc_test_profile_seq_read_perf()
1831 static int mmc_test_seq_write_perf(struct mmc_test_card *test, unsigned long sz) in mmc_test_seq_write_perf() argument
1833 struct mmc_test_area *t = &test->area; in mmc_test_seq_write_perf()
1838 ret = mmc_test_area_erase(test); in mmc_test_seq_write_perf()
1845 ret = mmc_test_area_io(test, sz, dev_addr, 1, 0, 0); in mmc_test_seq_write_perf()
1851 mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2); in mmc_test_seq_write_perf()
1858 static int mmc_test_profile_seq_write_perf(struct mmc_test_card *test) in mmc_test_profile_seq_write_perf() argument
1860 struct mmc_test_area *t = &test->area; in mmc_test_profile_seq_write_perf()
1865 ret = mmc_test_seq_write_perf(test, sz); in mmc_test_profile_seq_write_perf()
1870 return mmc_test_seq_write_perf(test, sz); in mmc_test_profile_seq_write_perf()
1876 static int mmc_test_profile_seq_trim_perf(struct mmc_test_card *test) in mmc_test_profile_seq_trim_perf() argument
1878 struct mmc_test_area *t = &test->area; in mmc_test_profile_seq_trim_perf()
1884 if (!mmc_can_trim(test->card)) in mmc_test_profile_seq_trim_perf()
1887 if (!mmc_can_erase(test->card)) in mmc_test_profile_seq_trim_perf()
1891 ret = mmc_test_area_erase(test); in mmc_test_profile_seq_trim_perf()
1894 ret = mmc_test_area_fill(test); in mmc_test_profile_seq_trim_perf()
1901 ret = mmc_erase(test->card, dev_addr, sz >> 9, in mmc_test_profile_seq_trim_perf()
1908 mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2); in mmc_test_profile_seq_trim_perf()
1924 static int mmc_test_rnd_perf(struct mmc_test_card *test, int write, int print, in mmc_test_rnd_perf() argument
1934 rnd_addr = mmc_test_capacity(test->card) / 4; in mmc_test_rnd_perf()
1935 range1 = rnd_addr / test->card->pref_erase; in mmc_test_rnd_perf()
1948 dev_addr = rnd_addr + test->card->pref_erase * ea + in mmc_test_rnd_perf()
1950 ret = mmc_test_area_io(test, sz, dev_addr, write, 0, 0); in mmc_test_rnd_perf()
1955 mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2); in mmc_test_rnd_perf()
1959 static int mmc_test_random_perf(struct mmc_test_card *test, int write) in mmc_test_random_perf() argument
1961 struct mmc_test_area *t = &test->area; in mmc_test_random_perf()
1974 ret = mmc_test_rnd_perf(test, write, 0, sz); in mmc_test_random_perf()
1979 ret = mmc_test_rnd_perf(test, write, 1, sz); in mmc_test_random_perf()
1986 ret = mmc_test_rnd_perf(test, write, 0, sz); in mmc_test_random_perf()
1991 return mmc_test_rnd_perf(test, write, 1, sz); in mmc_test_random_perf()
1997 static int mmc_test_random_read_perf(struct mmc_test_card *test) in mmc_test_random_read_perf() argument
1999 return mmc_test_random_perf(test, 0); in mmc_test_random_read_perf()
2005 static int mmc_test_random_write_perf(struct mmc_test_card *test) in mmc_test_random_write_perf() argument
2007 return mmc_test_random_perf(test, 1); in mmc_test_random_write_perf()
2010 static int mmc_test_seq_perf(struct mmc_test_card *test, int write, in mmc_test_seq_perf() argument
2013 struct mmc_test_area *t = &test->area; in mmc_test_seq_perf()
2036 dev_addr = mmc_test_capacity(test->card) / 4; in mmc_test_seq_perf()
2044 ret = mmc_test_area_io(test, sz, dev_addr, write, in mmc_test_seq_perf()
2052 mmc_test_print_avg_rate(test, sz, cnt, &ts1, &ts2); in mmc_test_seq_perf()
2057 static int mmc_test_large_seq_perf(struct mmc_test_card *test, int write) in mmc_test_large_seq_perf() argument
2062 ret = mmc_test_seq_perf(test, write, 10 * 1024 * 1024, 1); in mmc_test_large_seq_perf()
2067 ret = mmc_test_seq_perf(test, write, 100 * 1024 * 1024, 1); in mmc_test_large_seq_perf()
2072 ret = mmc_test_seq_perf(test, write, 1000 * 1024 * 1024, 1); in mmc_test_large_seq_perf()
2083 static int mmc_test_large_seq_read_perf(struct mmc_test_card *test) in mmc_test_large_seq_read_perf() argument
2085 return mmc_test_large_seq_perf(test, 0); in mmc_test_large_seq_read_perf()
2091 static int mmc_test_large_seq_write_perf(struct mmc_test_card *test) in mmc_test_large_seq_write_perf() argument
2093 return mmc_test_large_seq_perf(test, 1); in mmc_test_large_seq_write_perf()
2096 static int mmc_test_rw_multiple(struct mmc_test_card *test, in mmc_test_rw_multiple() argument
2102 struct mmc_test_area *t = &test->area; in mmc_test_rw_multiple()
2106 if (size > mmc_test_capacity(test->card) / 2 * 512) in mmc_test_rw_multiple()
2107 size = mmc_test_capacity(test->card) / 2 * 512; in mmc_test_rw_multiple()
2110 dev_addr = mmc_test_capacity(test->card) / 4; in mmc_test_rw_multiple()
2122 if (mmc_can_erase(test->card) && in mmc_test_rw_multiple()
2124 ret = mmc_erase(test->card, dev_addr, in mmc_test_rw_multiple()
2127 ret = mmc_erase(test->card, dev_addr, in mmc_test_rw_multiple()
2134 ret = mmc_test_area_io_seq(test, reqsize, dev_addr, in mmc_test_rw_multiple()
2146 static int mmc_test_rw_multiple_size(struct mmc_test_card *test, in mmc_test_rw_multiple_size() argument
2151 void *pre_req = test->card->host->ops->pre_req; in mmc_test_rw_multiple_size()
2152 void *post_req = test->card->host->ops->post_req; in mmc_test_rw_multiple_size()
2161 ret = mmc_test_rw_multiple(test, rw, rw->bs[i], rw->size, 0); in mmc_test_rw_multiple_size()
2168 static int mmc_test_rw_multiple_sg_len(struct mmc_test_card *test, in mmc_test_rw_multiple_sg_len() argument
2175 ret = mmc_test_rw_multiple(test, rw, 512*1024, rw->size, in mmc_test_rw_multiple_sg_len()
2186 static int mmc_test_profile_mult_write_blocking_perf(struct mmc_test_card *test) in mmc_test_profile_mult_write_blocking_perf() argument
2199 return mmc_test_rw_multiple_size(test, &test_data); in mmc_test_profile_mult_write_blocking_perf()
2205 static int mmc_test_profile_mult_write_nonblock_perf(struct mmc_test_card *test) in mmc_test_profile_mult_write_nonblock_perf() argument
2218 return mmc_test_rw_multiple_size(test, &test_data); in mmc_test_profile_mult_write_nonblock_perf()
2224 static int mmc_test_profile_mult_read_blocking_perf(struct mmc_test_card *test) in mmc_test_profile_mult_read_blocking_perf() argument
2237 return mmc_test_rw_multiple_size(test, &test_data); in mmc_test_profile_mult_read_blocking_perf()
2243 static int mmc_test_profile_mult_read_nonblock_perf(struct mmc_test_card *test) in mmc_test_profile_mult_read_nonblock_perf() argument
2256 return mmc_test_rw_multiple_size(test, &test_data); in mmc_test_profile_mult_read_nonblock_perf()
2262 static int mmc_test_profile_sglen_wr_blocking_perf(struct mmc_test_card *test) in mmc_test_profile_sglen_wr_blocking_perf() argument
2275 return mmc_test_rw_multiple_sg_len(test, &test_data); in mmc_test_profile_sglen_wr_blocking_perf()
2281 static int mmc_test_profile_sglen_wr_nonblock_perf(struct mmc_test_card *test) in mmc_test_profile_sglen_wr_nonblock_perf() argument
2294 return mmc_test_rw_multiple_sg_len(test, &test_data); in mmc_test_profile_sglen_wr_nonblock_perf()
2300 static int mmc_test_profile_sglen_r_blocking_perf(struct mmc_test_card *test) in mmc_test_profile_sglen_r_blocking_perf() argument
2313 return mmc_test_rw_multiple_sg_len(test, &test_data); in mmc_test_profile_sglen_r_blocking_perf()
2319 static int mmc_test_profile_sglen_r_nonblock_perf(struct mmc_test_card *test) in mmc_test_profile_sglen_r_nonblock_perf() argument
2332 return mmc_test_rw_multiple_sg_len(test, &test_data); in mmc_test_profile_sglen_r_nonblock_perf()
2338 static int mmc_test_hw_reset(struct mmc_test_card *test) in mmc_test_hw_reset() argument
2340 struct mmc_card *card = test->card; in mmc_test_hw_reset()
2689 static void mmc_test_run(struct mmc_test_card *test, int testcase) in mmc_test_run() argument
2694 mmc_hostname(test->card->host), mmc_card_id(test->card)); in mmc_test_run()
2696 mmc_claim_host(test->card->host); in mmc_test_run()
2705 mmc_hostname(test->card->host), i + 1, in mmc_test_run()
2709 ret = mmc_test_cases[i].prepare(test); in mmc_test_run()
2713 mmc_hostname(test->card->host), in mmc_test_run()
2725 gr->card = test->card; in mmc_test_run()
2735 test->gr = gr; in mmc_test_run()
2738 ret = mmc_test_cases[i].run(test); in mmc_test_run()
2742 mmc_hostname(test->card->host)); in mmc_test_run()
2746 mmc_hostname(test->card->host)); in mmc_test_run()
2751 mmc_hostname(test->card->host)); in mmc_test_run()
2756 mmc_hostname(test->card->host)); in mmc_test_run()
2760 mmc_hostname(test->card->host), ret); in mmc_test_run()
2768 ret = mmc_test_cases[i].cleanup(test); in mmc_test_run()
2772 mmc_hostname(test->card->host), in mmc_test_run()
2778 mmc_release_host(test->card->host); in mmc_test_run()
2781 mmc_hostname(test->card->host)); in mmc_test_run()
2849 struct mmc_test_card *test; local
2857 test = kzalloc(sizeof(struct mmc_test_card), GFP_KERNEL);
2858 if (!test)
2867 test->card = card;
2869 test->buffer = kzalloc(BUFFER_SIZE, GFP_KERNEL);
2871 test->highmem = alloc_pages(GFP_KERNEL | __GFP_HIGHMEM, BUFFER_ORDER);
2875 if (test->buffer && test->highmem) {
2877 if (test->buffer) {
2880 mmc_test_run(test, testcase);
2885 __free_pages(test->highmem, BUFFER_ORDER);
2887 kfree(test->buffer);
2888 kfree(test);