| # SPDX-License-Identifier: GPL-2.0 | |
| # (C) Copyright 2023, Advanced Micro Devices, Inc. | |
| import pytest | |
| import re | |
| """ | |
| Note: This test doesn't rely on boardenv_* configuration value but they can | |
| change test behavior. | |
| For example: | |
| # Setup env__mii_deive_test_skip to True if tests with ethernet PHY devices | |
| # should be skipped. For example: Missing PHY device | |
| env__mii_device_test_skip = True | |
| # Setup env__mii_device_test to set the MII device names. Test will be skipped | |
| # if env_mii_device_test is not set | |
| env__mii_device_test = { | |
| 'device_list': ['eth0', 'eth1'], | |
| } | |
| """ | |
| @pytest.mark.buildconfigspec("cmd_mii") | |
| def test_mii_info(u_boot_console): | |
| if u_boot_console.config.env.get("env__mii_device_test_skip", False): | |
| pytest.skip("MII device test is not enabled!") | |
| expected_output = "PHY" | |
| output = u_boot_console.run_command("mii info") | |
| if not re.search(r"PHY (.+?):", output): | |
| pytest.skip("PHY device does not exist!") | |
| assert expected_output in output | |
| @pytest.mark.buildconfigspec("cmd_mii") | |
| def test_mii_list(u_boot_console): | |
| if u_boot_console.config.env.get("env__mii_device_test_skip", False): | |
| pytest.skip("MII device test is not enabled!") | |
| f = u_boot_console.config.env.get("env__mii_device_test", None) | |
| if not f: | |
| pytest.skip("No MII device to test!") | |
| dev_list = f.get("device_list") | |
| if not dev_list: | |
| pytest.fail("No MII device list provided via env__mii_device_test!") | |
| expected_output = "Current device" | |
| output = u_boot_console.run_command("mii device") | |
| mii_devices = ( | |
| re.search(r"MII devices: '(.+)'", output).groups()[0].replace("'", "").split() | |
| ) | |
| assert len([x for x in dev_list if x in mii_devices]) == len(dev_list) | |
| assert expected_output in output | |
| @pytest.mark.buildconfigspec("cmd_mii") | |
| def test_mii_set_device(u_boot_console): | |
| test_mii_list(u_boot_console) | |
| f = u_boot_console.config.env.get("env__mii_device_test", None) | |
| dev_list = f.get("device_list") | |
| output = u_boot_console.run_command("mii device") | |
| current_dev = re.search(r"Current device: '(.+?)'", output).groups()[0] | |
| for dev in dev_list: | |
| u_boot_console.run_command(f"mii device {dev}") | |
| output = u_boot_console.run_command("echo $?") | |
| assert output.endswith("0") | |
| u_boot_console.run_command(f"mii device {current_dev}") | |
| output = u_boot_console.run_command("mii device") | |
| dev = re.search(r"Current device: '(.+?)'", output).groups()[0] | |
| assert current_dev == dev | |
| @pytest.mark.buildconfigspec("cmd_mii") | |
| def test_mii_read(u_boot_console): | |
| test_mii_list(u_boot_console) | |
| output = u_boot_console.run_command("mii info") | |
| eth_addr = hex(int(re.search(r"PHY (.+?):", output).groups()[0], 16)) | |
| u_boot_console.run_command(f"mii read {eth_addr} 0") | |
| output = u_boot_console.run_command("echo $?") | |
| assert output.endswith("0") | |
| @pytest.mark.buildconfigspec("cmd_mii") | |
| def test_mii_dump(u_boot_console): | |
| test_mii_list(u_boot_console) | |
| expected_response = "PHY control register" | |
| output = u_boot_console.run_command("mii info") | |
| eth_addr = hex(int(re.search(r"PHY (.+?):", output).groups()[0], 16)) | |
| response = u_boot_console.run_command(f"mii dump {eth_addr} 0") | |
| assert expected_response in response | |
| output = u_boot_console.run_command("echo $?") | |
| assert output.endswith("0") |