| # 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") |