1251139Sluigi// SPDX-License-Identifier: GPL-2.0+
2262151Sluigi/*
3251139Sluigi * Test for loadm command
4251139Sluigi *
5251139Sluigi * Copyright 2022 ARM Limited
6251139Sluigi * Copyright 2022 Linaro
7251139Sluigi *
8251139Sluigi * Authors:
9251139Sluigi *   Rui Miguel Silva <rui.silva@linaro.org>
10251139Sluigi */
11251139Sluigi
12251139Sluigi#include <common.h>
13251139Sluigi#include <console.h>
14251139Sluigi#include <mapmem.h>
15251139Sluigi#include <asm/global_data.h>
16251139Sluigi#include <dm/test.h>
17251139Sluigi#include <test/suites.h>
18251139Sluigi#include <test/test.h>
19251139Sluigi#include <test/ut.h>
20251139Sluigi
21251139Sluigi#define BUF_SIZE 0x100
22251139Sluigi
23251139Sluigi#define LOADM_TEST(_name, _flags)	UNIT_TEST(_name, _flags, loadm_test)
24251139Sluigi
25251139Sluigistatic int loadm_test_params(struct unit_test_state *uts)
26251139Sluigi{
27251139Sluigi	ut_assertok(console_record_reset_enable());
28251139Sluigi	run_command("loadm", 0);
29251139Sluigi	ut_assert_nextline("loadm - load binary blob from source address to destination address");
30251139Sluigi
31251139Sluigi	ut_assertok(console_record_reset_enable());
32251139Sluigi	run_command("loadm 0x12345678", 0);
33251139Sluigi	ut_assert_nextline("loadm - load binary blob from source address to destination address");
34251139Sluigi
35251139Sluigi	ut_assertok(console_record_reset_enable());
36262151Sluigi	run_command("loadm 0x12345678 0x12345678", 0);
37251139Sluigi	ut_assert_nextline("loadm - load binary blob from source address to destination address");
38251139Sluigi
39251139Sluigi	ut_assertok(console_record_reset_enable());
40251139Sluigi	run_command("loadm 0x12345678 0x12345678 0", 0);
41270252Sluigi	ut_assert_nextline("loadm: can not load zero bytes");
42251139Sluigi
43251139Sluigi	return 0;
44251139Sluigi}
45251139SluigiLOADM_TEST(loadm_test_params, UT_TESTF_CONSOLE_REC);
46251139Sluigi
47251139Sluigistatic int loadm_test_load (struct unit_test_state *uts)
48251139Sluigi{
49270252Sluigi	char *buf;
50270252Sluigi
51270252Sluigi	buf = map_sysmem(0, BUF_SIZE);
52270252Sluigi	memset(buf, '\0', BUF_SIZE);
53270252Sluigi	memset(buf, 0xaa, BUF_SIZE / 2);
54270252Sluigi
55270252Sluigi	ut_assertok(console_record_reset_enable());
56270252Sluigi	run_command("loadm 0x0 0x80 0x80", 0);
57270252Sluigi	ut_assert_nextline("loaded bin to memory: size: 128");
58270252Sluigi
59270252Sluigi	unmap_sysmem(buf);
60270252Sluigi
61270252Sluigi	return 0;
62270252Sluigi}
63270252SluigiLOADM_TEST(loadm_test_load, UT_TESTF_CONSOLE_REC);
64270252Sluigi
65270252Sluigiint do_ut_loadm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
66270252Sluigi{
67270252Sluigi	struct unit_test *tests = UNIT_TEST_SUITE_START(loadm_test);
68270252Sluigi	const int n_ents = UNIT_TEST_SUITE_COUNT(loadm_test);
69270252Sluigi
70270252Sluigi	return cmd_ut_category("loadm", "loadm_test_", tests, n_ents, argc,
71270252Sluigi			       argv);
72270252Sluigi}
73270252Sluigi