1# SPDX-License-Identifier: GPL-2.0 2# (C) Copyright 2023, Advanced Micro Devices, Inc. 3 4import pytest 5import re 6 7""" 8Note: This test doesn't rely on boardenv_* configuration value but they can 9change test behavior. 10 11For example: 12 13# Setup env__mii_deive_test_skip to True if tests with ethernet PHY devices 14# should be skipped. For example: Missing PHY device 15env__mii_device_test_skip = True 16 17# Setup env__mii_device_test to set the MII device names. Test will be skipped 18# if env_mii_device_test is not set 19env__mii_device_test = { 20 'device_list': ['eth0', 'eth1'], 21} 22""" 23 24@pytest.mark.buildconfigspec("cmd_mii") 25def test_mii_info(ubman): 26 if ubman.config.env.get("env__mii_device_test_skip", False): 27 pytest.skip("MII device test is not enabled!") 28 expected_output = "PHY" 29 output = ubman.run_command("mii info") 30 if not re.search(r"PHY (.+?):", output): 31 pytest.skip("PHY device does not exist!") 32 assert expected_output in output 33 34@pytest.mark.buildconfigspec("cmd_mii") 35def test_mii_list(ubman): 36 if ubman.config.env.get("env__mii_device_test_skip", False): 37 pytest.skip("MII device test is not enabled!") 38 39 f = ubman.config.env.get("env__mii_device_test", None) 40 if not f: 41 pytest.skip("No MII device to test!") 42 43 dev_list = f.get("device_list") 44 if not dev_list: 45 pytest.fail("No MII device list provided via env__mii_device_test!") 46 47 expected_output = "Current device" 48 output = ubman.run_command("mii device") 49 mii_devices = ( 50 re.search(r"MII devices: '(.+)'", output).groups()[0].replace("'", "").split() 51 ) 52 53 assert len([x for x in dev_list if x in mii_devices]) == len(dev_list) 54 assert expected_output in output 55 56@pytest.mark.buildconfigspec("cmd_mii") 57def test_mii_set_device(ubman): 58 test_mii_list(ubman) 59 f = ubman.config.env.get("env__mii_device_test", None) 60 dev_list = f.get("device_list") 61 output = ubman.run_command("mii device") 62 current_dev = re.search(r"Current device: '(.+?)'", output).groups()[0] 63 64 for dev in dev_list: 65 ubman.run_command(f"mii device {dev}") 66 output = ubman.run_command("echo $?") 67 assert output.endswith("0") 68 69 ubman.run_command(f"mii device {current_dev}") 70 output = ubman.run_command("mii device") 71 dev = re.search(r"Current device: '(.+?)'", output).groups()[0] 72 assert current_dev == dev 73 74@pytest.mark.buildconfigspec("cmd_mii") 75def test_mii_read(ubman): 76 test_mii_list(ubman) 77 output = ubman.run_command("mii info") 78 eth_addr = hex(int(re.search(r"PHY (.+?):", output).groups()[0], 16)) 79 ubman.run_command(f"mii read {eth_addr} 0") 80 output = ubman.run_command("echo $?") 81 assert output.endswith("0") 82 83@pytest.mark.buildconfigspec("cmd_mii") 84def test_mii_dump(ubman): 85 test_mii_list(ubman) 86 expected_response = "PHY control register" 87 output = ubman.run_command("mii info") 88 eth_addr = hex(int(re.search(r"PHY (.+?):", output).groups()[0], 16)) 89 response = ubman.run_command(f"mii dump {eth_addr} 0") 90 assert expected_response in response 91 output = ubman.run_command("echo $?") 92 assert output.endswith("0") 93