| # SPDX-License-Identifier: GPL-2.0 |
| # (C) Copyright 2023, Advanced Micro Devices, Inc. |
| |
| import pytest |
| |
| """ |
| Note: This test relies on boardenv_* containing configuration values to define |
| the memory test parameters such as start address, memory size, pattern, |
| iterations and timeout. This test will be automatically skipped without this. |
| |
| For example: |
| |
| # Setup env__memtest to set the start address of the memory range, size of the |
| # memory range to test from starting address, pattern to be written to memory, |
| # number of test iterations, and expected time to complete the test of mtest |
| # command. start address, size, and pattern parameters value should be in hex |
| # and rest of the params value should be integer. |
| env__memtest = { |
| 'start_addr': 0x0, |
| 'size': 0x1000, |
| 'pattern': 0x0, |
| 'iteration': 16, |
| 'timeout': 50000, |
| } |
| """ |
| |
| def get_memtest_env(u_boot_console): |
| f = u_boot_console.config.env.get("env__memtest", None) |
| if not f: |
| pytest.skip("memtest is not enabled!") |
| else: |
| start = f.get("start_addr", 0x0) |
| size = f.get("size", 0x1000) |
| pattern = f.get("pattern", 0x0) |
| iteration = f.get("iteration", 2) |
| timeout = f.get("timeout", 50000) |
| end = hex(int(start) + int(size)) |
| return start, end, pattern, iteration, timeout |
| |
| @pytest.mark.buildconfigspec("cmd_memtest") |
| def test_memtest_negative(u_boot_console): |
| """Negative testcase where end address is smaller than starting address and |
| pattern is invalid.""" |
| start, end, pattern, iteration, timeout = get_memtest_env(u_boot_console) |
| expected_response = "Refusing to do empty test" |
| response = u_boot_console.run_command( |
| f"mtest 2000 1000 {pattern} {hex(iteration)}" |
| ) |
| assert expected_response in response |
| output = u_boot_console.run_command("echo $?") |
| assert not output.endswith("0") |
| u_boot_console.run_command(f"mtest {start} {end} 'xyz' {hex(iteration)}") |
| output = u_boot_console.run_command("echo $?") |
| assert not output.endswith("0") |
| |
| @pytest.mark.buildconfigspec("cmd_memtest") |
| def test_memtest_ddr(u_boot_console): |
| """Test that md reads memory as expected, and that memory can be modified |
| using the mw command.""" |
| start, end, pattern, iteration, timeout = get_memtest_env(u_boot_console) |
| expected_response = f"Tested {str(iteration)} iteration(s) with 0 errors." |
| with u_boot_console.temporary_timeout(timeout): |
| response = u_boot_console.run_command( |
| f"mtest {start} {end} {pattern} {hex(iteration)}" |
| ) |
| assert expected_response in response |
| output = u_boot_console.run_command("echo $?") |
| assert output.endswith("0") |