1d1389403SSimon Glass /*
2d1389403SSimon Glass * (C) Copyright 2015 Google, Inc
3d1389403SSimon Glass *
4d1389403SSimon Glass * SPDX-License-Identifier: GPL-2.0+
5d1389403SSimon Glass */
6d1389403SSimon Glass
7d1389403SSimon Glass #include <common.h>
8d1389403SSimon Glass #include <command.h>
9f215287bSSimon Glass #include <div64.h>
10d1389403SSimon Glass #include "dhry.h"
11d1389403SSimon Glass
do_dhry(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])12d1389403SSimon Glass static int do_dhry(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
13d1389403SSimon Glass {
14f215287bSSimon Glass ulong start, duration, vax_mips;
15f215287bSSimon Glass u64 dhry_per_sec;
16d1389403SSimon Glass int iterations = 1000000;
17d1389403SSimon Glass
18d1389403SSimon Glass if (argc > 1)
19d1389403SSimon Glass iterations = simple_strtoul(argv[1], NULL, 10);
20d1389403SSimon Glass
21d1389403SSimon Glass start = get_timer(0);
22d1389403SSimon Glass dhry(iterations);
23d1389403SSimon Glass duration = get_timer(start);
24f215287bSSimon Glass dhry_per_sec = lldiv(iterations * 1000ULL, duration);
25*f23baa57STom Rini vax_mips = lldiv(dhry_per_sec, 1757);
26d1389403SSimon Glass printf("%d iterations in %lu ms: %lu/s, %lu DMIPS\n", iterations,
27f215287bSSimon Glass duration, (ulong)dhry_per_sec, vax_mips);
28d1389403SSimon Glass
29d1389403SSimon Glass return 0;
30d1389403SSimon Glass }
31d1389403SSimon Glass
32d1389403SSimon Glass U_BOOT_CMD(
33d1389403SSimon Glass dhry, 2, 1, do_dhry,
34d1389403SSimon Glass "[iterations] - run dhrystone benchmark",
35d1389403SSimon Glass "\n - run the Dhrystone 2.1 benchmark, a rough measure of CPU speed\n"
36d1389403SSimon Glass );
37